У меня работает Metatrader 5 build 3815 на wine-8.0.1 в 64-битной Ubuntu 20.04.6 LTS.
В своем эксперте я использую функцию из импортированной C# DLL (.NET Framework 4.8). Независимо от того, что делает экспортированная функция, при первом запуске эксперт работает нормально, а на второй раз Metatrader 5 просто падает. Отладчик никогда не попадал в точки останова в Эксперте до того, как Metatrader 5 падал.
Похоже, что некоторые ресурсы, связанные с DLL, не освобождаются после деинициализации Expert.
#import "Test.dll"#import
intOnInit()
{
// 2-й запуск аварийно завершается, если используется эта строкаPrint("DLL function result: ", TestStatic::TestFunc());
// при использовании этой строки не произойдет сбоя во втором запуске//Print("не использовались функции DLL");return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason){}
voidOnTick() {}
У меня работает Metatrader 5 build 3815 на wine-8.0.1 в 64-битной Ubuntu 20.04.6 LTS.
В своем эксперте я использую функцию из импортированной C# DLL (.NET Framework 4.8). Независимо от того, что делает экспортированная функция, при первом запуске эксперт работает нормально, а на второй раз Metatrader 5 просто падает. Отладчик никогда не попадает в точки останова в Эксперте до того, как Metatrader 5 падает.
Похоже, что некоторые ресурсы, связанные с DLL, не освобождаются после деинициализации Expert.
Есть ли способ это исправить?
Код DLL на C#:
Код эксперта:
Думаю, перезагрузка windows с помощью wine поможет...
У меня работает Metatrader 5 build 3815 на wine-8.0.1 в 64-битной Ubuntu 20.04.6 LTS.
В своем эксперте я использую функцию из импортированной C# DLL (.NET Framework 4.8). Независимо от того, что делает экспортированная функция, при первом запуске эксперт работает нормально, а на второй раз Metatrader 5 просто падает. Отладчик никогда не попадает в точки останова в Эксперте до того, как Metatrader 5 падает.
Похоже, что некоторые ресурсы, связанные с DLL, не освобождаются после деинициализации Expert.
Есть ли способ это исправить?
Код DLL на C#:
Код эксперта:
Да, я знаю, в чем проблема.
Ваша DLL не обрабатывает сообщения о загрузке и выгрузке должным образом.
Вам не хватает минимально необходимого кода для правильной загрузки и выгрузки DLL.
Вам не хватает минимально необходимого кода для правильной загрузки и выгрузки DLL.
Есть ли у вас спецификации или примеры кода, объясняющие, как это правильно делать? Потому что спецификация MQL5 говорит об обратном. Также мой опыт говорит об обратном: Я использую библиотеки .NET в нескольких MQL5-проектах, и они работают так, как ожидалось в Windows 8.1/10/11.
Я удаляю его вручную с графика или останавливаю с помощью отладчика - результат в обоих случаях один и тот же.
Есть ли у вас спецификации или примеры кода, объясняющие, как правильно это сделать? Потому что спецификация MQL5 говорит об обратном. Да и мой опыт говорит об обратном: Я использую .NET библиотеки в нескольких MQL5 проектах и все работает как надо в Windows 8.1/10/11.
Я удаляю его вручную с графика или останавливаю с помощью отладчика - результат в обоих случаях один и тот же.
Есть ли у вас спецификации или примеры кода, объясняющие, как правильно это сделать? Потому что спецификация MQL5 говорит об обратном. Да и мой опыт говорит об обратном: Я использую библиотеки .NET в нескольких MQL5-проектах, и они работают, как и ожидалось, в Windows 8.1/10/11.
Скорее всего, вы обнаружите, что DLL не отделяется от завершающегося процесса.
Я боролся с этой проблемой с mysqlclient.dll и смог выяснить, что тестер стратегий не отсоединяет DLL. Гораздо больше похоже, что Terminal действительно загружает DLL, и она остается загруженной.
Пожалуйста, проведите исследование, потому что я больше не могу подтвердить старые версии клиента, так как они не работают на сегодняшний день. Поэтому в настоящее время у меня нет возможности воспроизвести проблему с тех пор.
Скорее всего, вы обнаружите, что DLL не отделяется от завершающегося процесса.
Я боролся с этой проблемой с mysqlclient.dll и смог выяснить, что тестер стратегий не отсоединяет DLL. Гораздо больше похоже на то, что терминал на самом деле загружает DLL, и именно там она и остается.
Пожалуйста, проведите исследование, потому что я больше не могу подтвердить старые версии клиента, так как они не работают на сегодняшний день. Поэтому в настоящее время у меня нет возможности воспроизвести проблему с тех пор.
Мне стыдно. Я выяснил, что .NET Framework был неправильно установлен на префиксе Wine, где я запускаю терминал Metatrader 5. После его переустановки проблема с DLL была решена.
WStranger #: К моему стыду. Я выяснил, что .NET Framework был неправильно установлен на префиксе Wine, где я запускаю терминал Metatrader 5. После его переустановки проблема с DLL была решена.
Пробовал, не помогло. Каждый второй запуск EA с момента запуска терминала приводит к сбою, даже после wineboot
Dominik Christian Egert #:
Я удаляю его вручную с графика или останавливаю с помощью отладчика - результат в обоих случаях один и тот же.
Доминик Кристиан Эгерт#:
Я удаляю его вручную с графика или останавливаю с помощью отладчика - результат в обоих случаях один и тот же.
Есть ли у вас спецификации или примеры кода, объясняющие, как правильно это сделать? Потому что спецификация MQL5 говорит об обратном. Да и мой опыт говорит об обратном: Я использую .NET библиотеки в нескольких MQL5 проектах и все работает как надо в Windows 8.1/10/11.Я удаляю его вручную с графика или останавливаю с помощью отладчика - результат в обоих случаях один и тот же.
Есть ли у вас спецификации или примеры кода, объясняющие, как правильно это сделать? Потому что спецификация MQL5 говорит об обратном. Да и мой опыт говорит об обратном: Я использую библиотеки .NET в нескольких MQL5-проектах, и они работают, как и ожидалось, в Windows 8.1/10/11.К моему стыду. Я выяснил, что .NET Framework был неправильно установлен на префиксе Wine, где я запускаю терминал Metatrader 5. После его переустановки проблема с DLL была решена.