Виталий написал: Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Если вы у вас опыт работы 10+ лет и вы не можете связать 3 интерфейса, чтобы запустить сборку и вас забанили в гугле. То вам пора менять работу.
Александр, Тут всем пора менять работу - программисты вымерли. Логика на C++, интерфейс на C#, форум по Lua...
У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua.
Владимир написал: Александр, Тут всем пора менять работу - программисты вымерли. Логика на C++, интерфейс на C#, форум по Lua...
У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua. ::
Опять глюки начались, прими уже таблетки и успокойся.
Александр, Я всегда спокоен, лапуль. И глюки все давно исправил. Вернее, один остался- не знаю, как именно исправлять - может, и не буду, заглушка на этот глюк (не мой, Квика - я о нём писал) и сейчас работает нормально.
swerg написал: Фига себе! Александр , спасибо вам большое!!
Сложно это все, проще через CLRCreateInstance, ICLRMetaHost, ICLRRuntimeInfo, ICorRuntimeHost
Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Сейчас сделал загрузку сборки из квика на lua api данным способом. Все хорошо работает. Проверенно.
Владимир написал: У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua.
Тебе мамка сиську в детстве не давала? И теперь ты лезешь во все темы со своим мнением. Может другим способом задача автора не решается.
Александр, Лапуль, я уже говорил, что с раннего детства терпеть не могу распальцованных дураков. Гнутых пальцев я тут уже видел выше крыши, а программистов - полтора человека, и уж Вы никоим образом к ним не относитесь. Так что НЕ ВАМ что-то тут вякать про "пора менять работу". И говорил уже тыщу раз: задачи организации торговли настолько элементарны, что решаются ЛЮБЫМ способом. В частности, на чистом Lua, без всего этого маразма с обилием языков, библиотек, версий и прочей лабуды.
Владимир написал: Александр, Лапуль, я уже говорил, что с раннего детства терпеть не могу распальцованных дураков. Гнутых пальцев я тут уже видел выше крыши, а программистов - полтора человека, и уж Вы никоим образом к ним не относитесь. Так что НЕ ВАМ что-то тут вякать про "пора менять работу". И говорил уже тыщу раз: задачи организации торговли настолько элементарны, что решаются ЛЮБЫМ способом. В частности, на чистом Lua, без всего этого маразма с обилием языков, библиотек, версий и прочей лабуды.
Прими таблетки, а то только можешь ногами стучать, да желчь испускать.
Виталий написал: Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Если вы у вас опыт работы 10+ лет и вы не можете связать 3 интерфейса, чтобы запустить сборку и вас забанили в гугле. То вам пора менять работу.
По какому принципу сделан такой вывод? Как знание конкретной технологии или конкретного языка связано с опытом в области разработки?! Я не хочу развозить срач, как у вас тут с другим оратором вышло, но перед тем как давать такие громкие (кому-то, может даже, обидные) советы - надо хотя бы подумать )) Я нигде не писал, что 10 лет разработку веду на сях или на шарпее или упаси Бог на лунтике. Опыт по бОльшей части у меня в веб - от php до JS (React JS / Native). На шарпее лет 8 прикладного опыта по windows forms. Крестить никогда мне ничего не приходилось и не нужно было, если что. Так что Ваш совет это как сказать электрику по ремонту станков и оборудования типа "че, не можешь в автоэлектрике разобраться или автозвук подключить?! Тогда меняй работу". Ну или предъявить инженеру с автоваза, что он не может самолет спроектировать. Оно же ведь одно и тоже, сиди да черти себе ))) А гугл Ваш, кстати, не поможет, если там с подобной проблемой еще никого не было. Как правило, люди крестят Lua и C++, но не QLua. И как я понял исходя даже из этого форума - это немного разные вещи.
Владимир написал: Александр, Лапуль, я уже говорил, что с раннего детства терпеть не могу распальцованных дураков. Гнутых пальцев я тут уже видел выше крыши, а программистов - полтора человека, и уж Вы никоим образом к ним не относитесь. Так что НЕ ВАМ что-то тут вякать про "пора менять работу". И говорил уже тыщу раз: задачи организации торговли настолько элементарны, что решаются ЛЮБЫМ способом. В частности, на чистом Lua, без всего этого маразма с обилием языков, библиотек, версий и прочей лабуды.
Пока была возможность - решал на Lua. Теперь задачи поменялись немного и понадобился более стабильный, быстрый и подходящий язык. Либо C++ либо C#. Т.е. в любом случае это пока скорее эксперимент и я перебираю всевозможные варианты
Виталий, Вот режь меня, жги меня - НЕ ПОНИМАЮ, зачем здесь более быстрый язык! У меня и весь диалог, и вся индикация, и весь обмен с сервером написан на чистом Lua, и скрипт большую часть времени просто спит! Держит при этом несколько десятков тикеров (моделировал пару тысяч - разницы по скорости вообще не заметил). Свечи считаю сам (по десятку разных временных периодов), стоп-лоссы отслеживаю сам - НУ ЧТО тут может отжирать время, НУ ЧТО? О какой-никакой стабильности можно говорить как раз относительно Lua - дерьмо, конечно, но стабильное. А уж если тут определяют номера версий софта, настраиваются на них - какая тут может быть стабильность?
Виталий, Вам дали путь решения вашей проблемы, а вы вместо задавания вопросов, начинаете выступать, так не буду, сяк не буду. У вас проблемы вы ее и решайте. Информации больше, чем достаточно. Вопрос заключается в том, чтобы вызвать из неуправляемой среды управляемый код? Луа и QLua тут не причем. Примерный путь решения описан так.
Код
unk := nil;
OleCheck(CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, unk));
FMetaHost := unk as ICLRMetaHost;
unk := nil;
OleCheck(FMetaHost.GetRuntime(PWideChar(AClrVer), IID_ICLRRuntimeInfo, unk));
FRuntimeInfo := unk as ICLRRuntimeInfo;
FRunTimeInfo.SetDefaultStartupFlags(GetLoaderFlags(ConcurrentGC, LoaderFlags), nil); //Установим загрузочные флаги
OleCheck(FRuntimeInfo.IsLoadable(isLoaded)); //Проверяем на загружена ли сборка
if not isLoaded then
raise EOleError.CreateFmt(ECRLNotLoaded, [AClrVer]);
unk := nil;
OleCheck(FRuntimeInfo.GetInterface(CLASS_CorRuntimeHost, IID_ICorRuntimeHost, unk));
FDefaultInterface := unk as ICorRuntimeHost;
FDefaultInterface.Start;
iDomain := iHost.DefaultAppDomain;
RawAssembly := LoadAssemble('TestCrl.dll'); //Загрузка сборки в VarArray
&type := iAssm.GetType_2(typeName); //Получаем тип класса
ov := &type.InvokeMember_3('ctor', BindingFlags_CreateInstance, nil, null, nil); //Создаем класс
if VarSupports(ov, ITest, test) then //Получаем интерфейс
test.ShowMessage('Hi World'); //Вызываем функцию интерфейса
....
//Обнуляем интерфейсы
Владимир написал: Виталий, Вот режь меня, жги меня - НЕ ПОНИМАЮ, зачем здесь более быстрый язык! У меня и весь диалог, и вся индикация, и весь обмен с сервером написан на чистом Lua, и скрипт большую часть времени просто спит! Держит при этом несколько десятков тикеров (моделировал пару тысяч - разницы по скорости вообще не заметил). Свечи считаю сам (по десятку разных временных периодов), стоп-лоссы отслеживаю сам - НУ ЧТО тут может отжирать время, НУ ЧТО? О какой-никакой стабильности можно говорить как раз относительно Lua - дерьмо, конечно, но стабильное. А уж если тут определяют номера версий софта, настраиваются на них - какая тут может быть стабильность?
Резать и жечь не буду, а вот пояснить смогу )) Код, типа такого
Код
function summ()
for i = 1, 100000000 do
r = i + i;
end
end
Момент 1: на Lua будет выполняться порядка 1.3-1.4 сек, а в с++ примерно 0.2 сек. Я думаю, разница очевидна. Я лично проводил замеры, это не байка из тырнету. У меня до сих пор лежит этот код в примерах с замерами на lua и c++. Зачем такое в реальной жизни - хз, но по моему операция очень простая и мне неясно чего lua так долго с ней возится. Я даже сообщений никаких не вывожу, просто операция сложения. Но это далеко не все. Есть логика, которую банально удобнее и проще реализовывать на иных языках. Т.е., lua отдает данные во внешку, там происходит магия (быстрая и/или такая, на которую lua не способен) - в lua подается команда (не данные обратно, а именно команда) на сделку. Я же говорю: простой робот-торгаш - у меня таких полно и они именно на lua! Тут всего хватает, естественно. Но если мы говорим о более продвинутых вещах - ну можно извращаться на Lua, но зачем, если есть более заточенные для этого вещи.
Момент2: с переходом на новую версию квик и lua, как следствие, перестали у меня работать некоторые скрипты. Че будет в будущем - хз, но чинить сидеть всю логику потом с убогой отладкой - то еще удовольствие. А так, меньше шенсов, что в очередное "полезное" обновление что-то отвалится. Ну или чинить меньше придется
Момент 3: Собственно, отладка. Можно и логи писать, а потом их разбирать. Можно и мессаги выводить - не вопрос. Но проще же использовать удобный отладчик пошаговый )
Момент 4: Интерфейс. В Lua чего у нас? Таблицы. Одно дело, если хочется, но другое, если надо. Надо сделать что-то более серьезное, чем примитивные ячейки и клик по ней для действия. Да и в целом, сидеть выписывать интерфейс, когда его можно мышью накидать за секунды - это как писать мобильное приложение на React Native (выверстывая каждый элемент и потом страдая на разных экранах) вместо того, чтобы писать сразу на Kotlin в удобной студии, где верстка макета займет в прямом смысле пару минут и будет работать сразу везде одинаково и хорошо. Это вряд ли для Вас аргумент, но для меня очень даже.
Александр написал: Виталий, Вам дали путь решения вашей проблемы, а вы вместо задавания вопросов, начинаете выступать, так не буду, сяк не буду. У вас проблемы вы ее и решайте. Информации больше, чем достаточно. Вопрос заключается в том, чтобы вызвать из неуправляемой среды управляемый код? Луа и QLua тут не причем. Примерный путь решения описан так.
Код
unk : = nil ;
OleCheck(CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, unk));
FMetaHost : = unk as ICLRMetaHost;
unk : = nil ;
OleCheck( FMetaHost.GetRuntime (PWideChar(AClrVer), IID_ICLRRuntimeInfo, unk));
FRuntimeInfo : = unk as ICLRRuntimeInfo;
FRunTimeInfo.SetDefaultStartupFlags (GetLoaderFlags(ConcurrentGC, LoaderFlags), nil ); //Установим загрузочные флаги
OleCheck( FRuntimeInfo.IsLoadable (isLoaded)); //Проверяем на загружена ли сборка
if not isLoaded then
raise EOleError.CreateFmt (ECRLNotLoaded, [AClrVer]);
unk : = nil ;
OleCheck( FRuntimeInfo.GetInterface (CLASS_CorRuntimeHost, IID_ICorRuntimeHost, unk));
FDefaultInterface : = unk as ICorRuntimeHost;
FDefaultInterface.Start;
iDomain : = iHost.DefaultAppDomain;
RawAssembly : = LoadAssemble( 'TestCrl.dll' ); //Загрузка сборки в VarArray
& type : = iAssm.GetType_2 (typeName); //Получаем тип класса
ov : = & type.InvokeMember_3 ( 'ctor' , BindingFlags_CreateInstance, nil , null, nil ); //Создаем класс
if VarSupports(ov, ITest, test) then //Получаем интерфейс
test.ShowMessage ( 'Hi World' ); //Вызываем функцию интерфейса
.. ..
//Обнуляем интерфейсы
Более ничем помочь не могу.
Дык я еще за прошлые примеры сказал спасибо. И за этот тоже. Я не выступаю, я думаю на будущее и как разраб, а не кодер )) Кодер он ведь задачу в лоб решает. Ему сказали - он и кодит. И не важно, что есть решение проще и быстрее (а может оно же и лучше). Он тупо решает че сказали. Я так не умею (уже, раньше делал). Я ищу правильное решение, с которым потом страдать не придется. На данный момент, как и писал ранее, кажется нашел. Будем тестить и смотреть. За примеры еще раз спасибо.
Виталий, Господи, я прекрасно понимаю, что интерпретируемый язык на 1-2 порядка медленнее. Но кому нужен ТАКОЙ код? Нормальные алгоритмы торговли времени почти не требуют.
Насчёт "есть логика, которую банально удобнее и проще реализовывать на иных языках" - вообще-то, согласен: меня в своё время дико раздражало отсутствие типа integer и булевых операций. Но вот зачем "lua отдает данные во внешку" - это выше моего понимания!
Насколько я вижу по этому форуму, проблемы с переходом на новую версию возникают как раз не у тех, кто пишет на lua (кстати, есть тут такие, кроме меня?), а как раз у "альтернативщиков". А чего "чинить логику"? Во всех языках чуть не самая стабильная конструкция как раз if-then-else. Я и писал на lua, и других агитировал это делать как раз под этим самым лозунгом: "Меньше шансов, что в очередное "полезное" обновление что-то отвалится".
Да, я именно "логами и мессагами" и отлаживался. А "удобным отладчиком" не пользуюсь вот уже лет 30 - с тех пор, как нарвался, что в сложных случаях глючит как раз пошаговый отладчик.
Ну да, в Lua у нас таблицы, причём безобразно сделанные и глючащие. А что ещё нужно, кроме "примитивных ячеек и кликов по ним"? Ну, горячих клавиш пара-тройка. У меня одна таблица информационная (динамически обновляемая, имеющая три режима выдачи), а вторая - контекстное меню для каждой строки первой таблицы! Накидать его можно... ну, не за секунды, а за пару часов. Накидал и забыл! Много дней у меня уж работает этот диалог, и он меня ПОЛНОСТЬЮ устраивает! Всё, у меня диалог ГОТОВ! Написан и забыт. Остались небольшие проблемы с этими долбаными прерываниями, которые тут приходят целой колодой, да ещё вразнобой. Ну и шлифовка своих алгоритмов - всю эту неделю скрипт торгует в автоматическом режиме, а я за ним присматриваю и пытаюсь понять: лучше меня он торгует или хуже. Результат явно не в мою пользу, так что даже и не знаю, что там ещё улучшать.
Владимир написал: Виталий, Господи, я прекрасно понимаю, что интерпретируемый язык на 1-2 порядка медленнее. Но кому нужен ТАКОЙ код? Нормальные алгоритмы торговли времени почти не требуют.
Насчёт "есть логика, которую банально удобнее и проще реализовывать на иных языках" - вообще-то, согласен: меня в своё время дико раздражало отсутствие типа integer и булевых операций. Но вот зачем "lua отдает данные во внешку" - это выше моего понимания! ::
Насколько я вижу по этому форуму, проблемы с переходом на новую версию возникают как раз не у тех, кто пишет на lua (кстати, есть тут такие, кроме меня?), а как раз у "альтернативщиков". А чего "чинить логику"? Во всех языках чуть не самая стабильная конструкция как раз if-then-else. Я и писал на lua, и других агитировал это делать как раз под этим самым лозунгом: "Меньше шансов, что в очередное "полезное" обновление что-то отвалится".
Да, я именно "логами и мессагами" и отлаживался. А "удобным отладчиком" не пользуюсь вот уже лет 30 - с тех пор, как нарвался, что в сложных случаях глючит как раз пошаговый отладчик.
Ну да, в Lua у нас таблицы, причём безобразно сделанные и глючащие. А что ещё нужно, кроме "примитивных ячеек и кликов по ним"? Ну, горячих клавиш пара-тройка. У меня одна таблица информационная (динамически обновляемая, имеющая три режима выдачи), а вторая - контекстное меню для каждой строки первой таблицы! Накидать его можно... ну, не за секунды, а за пару часов. Накидал и забыл! Много дней у меня уж работает этот диалог, и он меня ПОЛНОСТЬЮ устраивает! Всё, у меня диалог ГОТОВ! Написан и забыт. Остались небольшие проблемы с этими долбаными прерываниями, которые тут приходят целой колодой, да ещё вразнобой. Ну и шлифовка своих алгоритмов - всю эту неделю скрипт торгует в автоматическом режиме, а я за ним присматриваю и пытаюсь понять: лучше меня он торгует или хуже. Результат явно не в мою пользу, так что даже и не знаю, что там ещё улучшать. ::
Дык на Lua вроде писал и были траблы. Уже не вспомню с чем, вроде не сильно серьезные, но как раз на отладку и понимание что они там наменяли, что у меня полетело и ушло больше времени. Интерфейс на таблицах, ну да, была у меня наработка тоже. Типа написал и юзаешь. Да вот только ограничений много все равно. Покрасить хотя бы ячейки в разные цвета - 100500 строк кода, хоть и "написал и забыл", но в другом языке это быстрее в разы. Опять же, есть уверенность, что в следующей версии они как раз до таблиц не доберутся? Да так наменяют, что весь интерфейс посыпется? )) Каждому свое. Если есть алгоритм, который можно воспроизвести на LUA - дык и хорошо. Говорю же, простые вещи я на нем и делал, году с 2015. Тогда тоже крутил, вертел и в итоге сели на LUA делать. И да, с тех пор пара скриптов так и вертится. Тот же простейший журнал сделок. 5 лет без сбоев и работал, сделки сохранял везде и всегда и помогал неоднократно, даже пару раз в спорах с брокером по поводу коммисов ) Но как бы так ведь можно было бы и до сих пор на DOS каком-нибудь сидеть. Прогресс он же прогрессирует, надо щупать новые подходы тоже ))
ВиталийКак правило, люди крестят Lua и C++, но не QLua. И как я понял исходя даже из этого форума - это немного разные вещи.
Вообще никакой разницы между Lua и QLua нет. Ну с точки зрения программирования, интерфейсов и т.д. QLua - это Lua с добавленными глобальными функциями грубо говоря, и это характерно для любого реального применения Lua где-либо.
Виталий, Конечно, "на Lua были и есть траблы". Но они более-менее стабильные: отладил - и забыл на долгие годы.
ЧАВО???!!! Какие "100500 строк кода"?! Вот фрагмент основной таблицы моего скрипта (сегодняшний слепок) - раскрашен, как попугай! Блин, как тут картинку-то вставить? Ага, кажись, вот так...
Не знаю, не знаю. Я вот как раз и рассчитываю, что этот мой скрипт и будет "5 лет без сбоев работать". А у Билла и было-то три операционки: DOS 3.3, Win-95, да WinNT - какой уж тут, в задницу, "прогресс"...
Если еще интересна данный вопрос. Сегодня столкнулся с подобной проблемой. в коде
Код
package.cpath = getWorkingFolder().."\\Libraries\\Test.dll"
require("Test")
------------------------------------------------------------------
Run = true
function main()
message(get_test.test_info())
while (Run) do
sleep(100)
end
end
------------------------------------------------------------------
function OnStop()
Run = false
return 5000;
end
function OnClose()
Run = false
end
Поймал проблему с выгрузкой DLL после завершения работы скрипта.
Код
package.cpath = getWorkingFolder().."\\Libraries\\Test.dll"
function OnInit()
require("Test")
end
------------------------------------------------------------------
Run = true
function main()
message(get_test.test_info())
while (Run) do
sleep(100)
end
end
------------------------------------------------------------------
function OnStop()
Run = false
return 5000;
end
function OnClose()
Run = false
end
проблема ушла в небытие. DLL сразу выгружается при завершении работы скрипта.