Некорректная выгрузка DLL при завершении скрипта

Страницы: Пред. 1 2
RSS
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
Александр написал:
ир
Там есть опечатки и битые ссылки, в той статье. Она Ваша?
 
Цитата
Александр написал:
Тут читать   https://miac.volmed.org.ru/wiki/index.php/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D­ ­0%...  
ExportDLL брать тут  https://yadi.sk/d/qAlXi-OnjniSt
Там есть опечатки и битые ссылки, в той статье. Она Ваша?
 
Цитата
Виталий написал:
Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Если вы у вас опыт работы 10+ лет и вы не можете связать 3 интерфейса, чтобы запустить сборку и вас забанили в гугле.
То вам пора менять работу.
 
Цитата
Александр написал:
Там есть опечатки и битые ссылки, в той статье. Она Ваша?
Статья не моя, но я вдохновлялся подобной статьей.
 
Александр,  Тут всем пора менять работу - программисты вымерли. Логика на C++, интерфейс на C#, форум по Lua...

У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua.  :smile:  
 
Цитата
Владимир написал:
Александр,  Тут всем пора менять работу - программисты вымерли. Логика на C++, интерфейс на C#, форум по Lua...

У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua. ::  
Опять глюки начались, прими уже таблетки и успокойся.
 
Александр, Я всегда спокоен, лапуль. И глюки все давно исправил. Вернее, один остался- не знаю, как именно исправлять - может, и не буду, заглушка на этот глюк (не мой, Квика - я о нём писал) и сейчас работает нормально.  
 
Цитата
Виталий написал:
Цитата
Александр написал:
 
Цитата
swerg  написал:
Фига себе!
Александр , спасибо вам большое!!
 Сложно это все, проще через CLRCreateInstance, ICLRMetaHost, ICLRRuntimeInfo, ICorRuntimeHost
Смотрел, не понял, как это сделать и куда всунуть чего в моей либе сишной. Да и есть ли смысл, уже не знаю даже. Лучше, наверное, все-таки делить ответственность: логика на C++, интерфейс на C#. За примеры спасибо, изучу, вероятно применю что-то в будущем.
Сейчас сделал загрузку сборки из квика на lua api данным способом. Все хорошо работает. Проверенно.
 
Цитата
Владимир написал:
У меня опыт работы 30+ лет, и я не могу "связать 3 интерфейса, чтобы запустить сборку". Более того, считаю это клиническим маразмом, так что сделал логику на Lua, интерфейс на Lua и всё остальное тоже на Lua.    
Тебе мамка сиську в детстве не давала? И теперь ты лезешь во все темы  со своим мнением. Может другим способом задача автора не  решается.
 
Александр, Лапуль, я уже говорил, что с раннего детства терпеть не могу распальцованных дураков. Гнутых пальцев я тут уже видел выше крыши, а программистов - полтора человека, и уж Вы никоим образом к ним не относитесь. Так что НЕ ВАМ что-то тут вякать про "пора менять работу".  :wink: И говорил уже тыщу раз: задачи организации торговли настолько элементарны, что решаются ЛЮБЫМ способом. В частности, на чистом 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 отдает данные во внешку" - это выше моего понимания! :smile:

Насколько я вижу по этому форуму, проблемы с переходом на новую версию возникают как раз не у тех, кто пишет на lua (кстати, есть тут такие, кроме меня?), а как раз у "альтернативщиков". А чего "чинить логику"? Во всех языках чуть не самая стабильная конструкция как раз if-then-else. Я и писал на lua, и других агитировал это делать как раз под этим самым лозунгом: "Меньше шансов, что в очередное "полезное" обновление что-то отвалится".

Да, я именно "логами и мессагами" и отлаживался. А "удобным отладчиком" не пользуюсь вот уже лет 30 - с тех пор, как нарвался, что в сложных случаях глючит как раз пошаговый отладчик.

Ну да, в Lua у нас таблицы, причём безобразно сделанные и глючащие. А что ещё нужно, кроме "примитивных ячеек и кликов по ним"? Ну, горячих клавиш пара-тройка. У меня одна таблица информационная (динамически обновляемая, имеющая три режима выдачи), а вторая - контекстное меню для каждой строки первой таблицы! Накидать его можно... ну, не за секунды, а за пару часов. Накидал и забыл! Много дней у меня уж работает этот диалог, и он меня ПОЛНОСТЬЮ устраивает! Всё, у меня диалог ГОТОВ! Написан и забыт. Остались небольшие проблемы с этими долбаными прерываниями, которые тут приходят целой колодой, да ещё вразнобой. Ну и шлифовка своих алгоритмов - всю эту неделю скрипт торгует в автоматическом режиме, а я за ним присматриваю и пытаюсь понять: лучше меня он торгует или хуже. Результат явно не в мою пользу, так что даже и не знаю, что там ещё улучшать. :smile:  
 
Цитата
Владимир написал:
Виталий, Господи, я прекрасно понимаю, что интерпретируемый язык на 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 где-либо.

Просто для справки, для понимания.
 
Цитата
Александр
Код
    unk : =   nil ;
  OleCheck(CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, unk));
  FMetaHost : =  unk as ICLRMetaHost;
  

Wow, под .NET на Delphi?! Мсье знает толк! :)
Без обид, просто неожиданно очень было увидеть.
 
Виталий, Конечно, "на Lua были и есть траблы". Но они более-менее стабильные: отладил - и забыл на долгие годы.

ЧАВО???!!! Какие "100500 строк кода"?! Вот фрагмент основной таблицы моего скрипта (сегодняшний слепок) - раскрашен, как попугай! Блин, как тут картинку-то вставить? Ага, кажись, вот так...

Не знаю, не знаю. Я вот как раз и рассчитываю, что этот мой скрипт и будет "5 лет без сбоев работать". А у Билла и было-то три операционки: DOS 3.3, Win-95, да WinNT - какой уж тут, в задницу, "прогресс"...
 
Цитата
swerg написал:
Цитата
Александр
 
Код
      unk :  =     nil  ;
  OleCheck(CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, unk));
  FMetaHost :  =   unk as ICLRMetaHost;
    

Wow, под .NET на Delphi?! Мсье знает толк! :)
Без обид, просто неожиданно очень было увидеть.
Delphi норм язык, быстрый с новыми фичами. С луа апи вообще огонь получается.
 
Если еще интересна данный вопрос.
Сегодня столкнулся с подобной проблемой. в коде
Код
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 сразу выгружается при завершении работы скрипта.
Страницы: Пред. 1 2
Читают тему
Наверх