文章 "Linux 上的 MetaTrader 5" - 页 24 1...1718192021222324252627282930 新评论 WStranger 2023.07.28 14:45 #231 大家好! 我在 64 位 Ubuntu 20.04.6 LTS 的 wine-8.0.1 上运行 Metatrader 5 build 3815。 在我的 "专家顾问 "中,我使用了一个从导入的 C# DLL(.NET Framework 4.8)中导出的函数。不管导出的函数是做什么的,专家顾问在我第一次启动时运行良好,而第二次启动时 Metatrader 5 就崩溃了。在 Metatrader 5 崩溃之前,调试器从未在专家程序中遇到断点。 看来在专家程序取消初始化后,与 DLL 相关的一些资源没有被释放。 有办法解决这个问题吗? C# DLL 代码: namespace Test { public static class TestStatic { public static string TestFunc() { return "test return value"; } } } 专家顾问代码: #import "Test.dll" #import int OnInit() { // 如果使用了这一行,第二次运行就会崩溃 Print("DLL function result: ", TestStatic::TestFunc()); // 如果使用这一行,第二次运行不会崩溃 //Print("no DLL functions used"); return(INIT_SUCCEEDED); } void OnDeinit(const int reason){} void OnTick() {} Discussion of article "MetaTrader 如何开始使用Metatrader 5 测试x64平台的新MQL5编译器--计算速度提高2至10倍 Dominik Egert 2023.07.28 19:19 #232 WStranger #:大家好 我在 64 位 Ubuntu 20.04.6 LTS 的 wine-8.0.1 上运行 Metatrader 5 build 3815。 在我的 "专家顾问 "中,我使用了一个从导入的 C# DLL(.NET Framework 4.8)中导出的函数。不管导出的函数是做什么用的,专家顾问在我第一次启动时运行良好,而第二次启动时 Metatrader 5 就崩溃了。在 Metatrader 5 崩溃之前,调试器从未在专家程序中遇到断点。 看来在专家程序去初始化后,一些与 DLL 相关的资源没有被释放。 有办法解决这个问题吗? C# DLL 代码: 专家顾问代码: 我猜用红酒重启 Windows 就可以了... WStranger 2023.07.28 19:39 #233 Dominik Christian Egert #:我想用葡萄酒重启 Windows 就可以了...... 试过了,没用。自终端启动后,每启动一次 EA 都会导致崩溃,甚至在重启 wine 后也是如此 Dominik Egert 2023.07.28 22:06 #234 WStranger #: 试过了,没用。自终端启动以来,每启动一次 EA 都会导致崩溃,即使是在重启后也是如此。我不确定,但我想我在 Windows 上也遇到过同样的问题,....。但我不记得我是怎么解决的了。或者我是否解决了这个问题....。如何终止 EA? Dominik Egert 2023.07.28 22:12 #235 WStranger #:大家好 我在 64 位 Ubuntu 20.04.6 LTS 中的 wine-8.0.1 上运行 Metatrader 5 build 3815。 在我的 "专家顾问 "中,我使用了一个从导入的 C# DLL(.NET Framework 4.8)中导出的函数。不管导出的函数是做什么用的,专家顾问在我第一次启动时运行良好,而第二次启动时 Metatrader 5 就崩溃了。在 Metatrader 5 崩溃之前,调试器从未在专家程序中遇到断点。 看来在专家程序去初始化后,一些与 DLL 相关的资源没有被释放。 有办法解决这个问题吗? C# DLL 代码: 专家顾问代码: 是的,我知道问题所在。您的 DLL 没有正确处理加载和卸载信息。您缺少正确加载和卸载 DLL 所需的最基本代码。 WStranger 2023.07.29 12:45 #236 Dominik Christian Egert #: 如何终止 EA? 我从图表中手动删除或用调试器停止,结果都一样。 Dominik Christian Egert#: 您缺少正确加载和卸载 DLL 所需的最基本代码。 您是否有任何规范或代码示例来解释如何正确加载和卸载?因为 MQL5 的规范 并非如此。我的经验也是如此:我在多个 MQL5 项目中使用 .NET 库,在 Windows 8.1/10/11 中均能正常工作。 Dominik Egert 2023.07.29 13:05 #237 WStranger #:我手动从图表中删除它,或者用调试器停止它,结果都一样。 您是否有任何规范或代码示例解释如何正确操作?因为 MQL5的规范 并非如此。我的经验也是如此:我在多个 MQL5 项目中使用了 .NET 库,在 Windows 8.1/10/11 中都能正常工作。https://www.mql5.com/en/forum/136657编辑:https:// learn.microsoft.com/en-us/windows/win32/dlls/dllmain Dominik Egert 2023.07.29 13:13 #238 WStranger #:我手动从图表中删除它,或者用调试器停止它,结果都一样。 您是否有任何规范或代码示例解释如何正确操作?因为 MQL5 的规格 说明并非如此。我的经验也是如此:我在多个 MQL5 项目中使用了 .NET 库,在 Windows 8.1/10/11 中都能正常工作。您可能会发现 DLL 没有从终止进程中分离出来。我一直在努力解决 mysqlclient.dll 的这一问题,并发现策略测试程序并没有干净地分离 DLL。更重要的是,似乎终端实际上在加载 DLL,而且一直加载在那里。请对此进行一些研究,因为我无法再确认旧版本的客户端,因为它们目前已无法使用。因此,我目前无法重现当年的问题。 WStranger 2023.07.31 13:30 #239 Dominik Christian Egert #:你可能会发现,DLL 并没有从终止进程中分离出来。 我曾在处理 mysqlclient.dll 时遇到过这个问题,后来发现 strategy tester 并没有将 DLL 干净地分离出来。更多的情况是,Terminal 实际上在加载 DLL,而且一直加载在那里。 请对此进行一些研究,因为我无法再确认旧版本的客户端,因为它们目前已无法使用。因此,我目前无法重现当时的问题。 。 我真无耻。我发现在运行 Metatrader 5 终端的 Wine 前缀上没有正确安装 .NET Framework。重新安装后,DLL 问题就解决了。 无论如何,感谢您的帮助! WineHQ - .NET Framework 4.8 appdb.winehq.org Open Source Software for running Windows applications on other operating systems. Dominik Egert 2023.07.31 17:48 #240 WStranger #: 我真无耻。我发现在运行 Metatrader 5 终端的 Wine 前缀上没有正确安装 .NET Framework。重新安装后,DLL 问题就解决了。 无论如何,感谢您的帮助! 谢谢您的反馈,我并不知道。 1...1718192021222324252627282930 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
试过了,没用。自终端启动以来,每启动一次 EA 都会导致崩溃,即使是在重启后也是如此。
Dominik Christian Egert #:
我从图表中手动删除或用调试器停止,结果都一样。
Dominik Christian Egert#:
我手动从图表中删除它,或者用调试器停止它,结果都一样。
您是否有任何规范或代码示例解释如何正确操作?因为 MQL5的规范 并非如此。我的经验也是如此:我在多个 MQL5 项目中使用了 .NET 库,在 Windows 8.1/10/11 中都能正常工作。我手动从图表中删除它,或者用调试器停止它,结果都一样。
您是否有任何规范或代码示例解释如何正确操作?因为 MQL5 的规格 说明并非如此。我的经验也是如此:我在多个 MQL5 项目中使用了 .NET 库,在 Windows 8.1/10/11 中都能正常工作。。
我真无耻。我发现在运行 Metatrader 5 终端的 Wine 前缀上没有正确安装 .NET Framework。重新安装后,DLL 问题就解决了。