Ich benutze Metatrader 5 build 3815 auf wine-8.0.1 in 64-bit Ubuntu 20.04.6 LTS.
In meinem Expert Advisor verwende ich eine Funktion aus einer importierten C# DLL (.NET Framework 4.8). Unabhängig davon, was die exportierte Funktion tun, der Experte funktioniert gut, wenn ich es zum ersten Mal starten, und das zweite Mal Metatrader 5 stürzt einfach ab. Der Debugger erreicht nie Haltepunkte im Expert, bevor Metatrader 5 abstürzt.
Es sieht so aus, als ob einige Ressourcen, die mit der DLL verbunden sind, nach der Deinitialisierung des Experten nicht freigegeben werden.
#import "Test.dll"#import
intOnInit()
{
// 2. Lauf stürzt ab, wenn diese Zeile verwendet wirdPrint("DLL function result: ", TestStatic::TestFunc());
// kein Absturz im 2. Lauf, wenn diese Zeile verwendet wird//Drucken("keine DLL-Funktionen verwendet");return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason){}
voidOnTick() {}
Ich bin mit Metatrader 5 build 3815 auf Wein-8.0.1 in 64-Bit-Ubuntu 20.04.6 LTS.
In meinem Expert Advisor verwende ich eine Funktion aus einer importierten C# DLL (.NET Framework 4.8). Unabhängig davon, was die exportierte Funktion tun, der Experte funktioniert gut, wenn ich es zum ersten Mal starten, und das zweite Mal Metatrader 5 stürzt einfach ab. Der Debugger erreicht nie Haltepunkte im Expert, bevor Metatrader 5 abstürzt.
Es sieht so aus, als ob einige Ressourcen, die mit der DLL verbunden sind, nach der Deinitialisierung des Experten nicht freigegeben werden.
Gibt es eine Möglichkeit, dies zu beheben?
C# DLL-Code:
Expert Advisor Code:
Ich schätze, ein Neustart von Windows wird das Problem lösen...
Ich bin mit Metatrader 5 build 3815 auf Wein-8.0.1 in 64-Bit-Ubuntu 20.04.6 LTS.
In meinem Expert Advisor verwende ich eine Funktion aus einer importierten C# DLL (.NET Framework 4.8). Unabhängig davon, was die exportierte Funktion tun, der Experte funktioniert gut, wenn ich es zum ersten Mal starten, und das zweite Mal Metatrader 5 stürzt einfach ab. Der Debugger erreicht nie Haltepunkte im Expert, bevor Metatrader 5 abstürzt.
Es sieht so aus, als ob einige Ressourcen, die mit der DLL verbunden sind, nach der Deinitialisierung des Experten nicht freigegeben werden.
Gibt es eine Möglichkeit, dies zu beheben?
C# DLL-Code:
Expert Advisor-Code:
Ja, ich weiß, was das Problem ist.
Ihre DLL verarbeitet Lade- und Entlademeldungen nicht richtig.
Ihnen fehlt der erforderliche Mindestcode für das ordnungsgemäße Laden und Entladen von DLLs.
Ihnen fehlt der minimal erforderliche Code für das korrekte Laden und Entladen von DLLs.
Haben Sie eine Spezifikation oder ein Codebeispiel, das erklärt, wie man das richtig macht? Denn die MQL5 Spezifikationsagt etwas anderes. Auch meine Erfahrung sagt etwas anderes: Ich verwende .NET-Bibliotheken in mehreren MQL5-Projekten und es funktioniert wie erwartet unter Windows 8.1/10/11.
Ich lösche sie manuell aus einem Diagramm oder stoppe sie mit dem Debugger - das Ergebnis ist in beiden Fällen das gleiche.
Haben Sie eine Spezifikation oder ein Codebeispiel, das erklärt, wie man dies richtig macht? Denn die MQL5 Spezifikationsagt etwas anderes. Auch meine Erfahrung sagt etwas anderes: Ich verwende .NET-Bibliotheken in mehreren MQL5-Projekten und es funktioniert wie erwartet unter Windows 8.1/10/11.
Ich lösche sie manuell aus einem Diagramm oder stoppe sie mit dem Debugger - das Ergebnis ist in beiden Fällen das gleiche.
Haben Sie eine Spezifikation oder ein Codebeispiel, das erklärt, wie man dies richtig macht? Denn die MQL5 Spezifikationsagt etwas anderes. Auch meine Erfahrung sagt etwas anderes: Ich verwende .NET-Bibliotheken in mehreren MQL5-Projekten und es funktioniert wie erwartet unter Windows 8.1/10/11.
Was Sie wahrscheinlich feststellen werden, ist, dass die DLL nicht von dem beendeten Prozess getrennt wird.
Ich hatte mit diesem Problem mit mysqlclient.dll zu kämpfen und konnte herausfinden, dass der Strategietester die DLL nicht sauber ablöst. Vielmehr scheint es, als würde Terminal die DLL tatsächlich laden, und dort bleibt sie auch geladen.
Bitte recherchieren Sie das, denn ich kann das bei älteren Client-Versionen nicht mehr bestätigen, da diese ab heute nicht mehr funktionieren. Daher habe ich derzeit keine Möglichkeit, das Problem von damals zu reproduzieren.
Wahrscheinlich werden Sie feststellen, dass die DLL nicht vom beendenden Prozess abgetrennt ist.
Ich hatte mit diesem Problem mit mysqlclient.dll zu kämpfen und konnte herausfinden, dass Strategy Tester die DLL nicht sauber ablöst. Vielmehr scheint es, dass Terminal die DLL tatsächlich lädt, und dort bleibt sie auch geladen.
Bitte recherchieren Sie das, denn ich kann das bei älteren Client-Versionen nicht mehr bestätigen, da diese ab heute nicht mehr funktionieren. Daher habe ich derzeit keine Möglichkeit, das Problem von damals zu reproduzieren.
Schande über mich. Ich habe herausgefunden, dass das .NET Framework auf dem Wine-Präfix, auf dem ich das Metatrader 5 Terminal laufen lasse, nicht richtig installiert war. Nachdem ich es neu installiert hatte, war das DLL-Problem gelöst.
WStranger #: Schande über mich. Ich habe herausgefunden, dass .NET Framework auf dem Wine-Präfix, auf dem ich das Metatrader 5-Terminal ausführe, nicht richtig installiert war. Nachdem ich es neu installiert hatte, war das DLL-Problem gelöst.
Versucht, hat nicht geholfen. Jeder zweite EA-Start seit dem Terminal-Start führt zu einem Crush, auch nach Wineboot
Dominik Christian Egert #:
Ich löschen Sie es manuell aus einem Diagramm oder stoppen Sie es mit Debugger - Ergebnis ist das gleiche in beiden Fällen.
Dominik Christian Egert#:
Ich lösche sie manuell aus einem Diagramm oder stoppe sie mit dem Debugger - das Ergebnis ist in beiden Fällen das gleiche.
Haben Sie eine Spezifikation oder ein Codebeispiel, das erklärt, wie man dies richtig macht? Denn die MQL5 Spezifikation sagt etwas anderes. Auch meine Erfahrung sagt etwas anderes: Ich verwende .NET-Bibliotheken in mehreren MQL5-Projekten und es funktioniert wie erwartet unter Windows 8.1/10/11.Ich lösche sie manuell aus einem Diagramm oder stoppe sie mit dem Debugger - das Ergebnis ist in beiden Fällen das gleiche.
Haben Sie eine Spezifikation oder ein Codebeispiel, das erklärt, wie man dies richtig macht? Denn die MQL5 Spezifikation sagt etwas anderes. Auch meine Erfahrung sagt etwas anderes: Ich verwende .NET-Bibliotheken in mehreren MQL5-Projekten und es funktioniert wie erwartet unter Windows 8.1/10/11.Schande über mich. Ich habe herausgefunden, dass .NET Framework auf dem Wine-Präfix, auf dem ich das Metatrader 5-Terminal ausführe, nicht richtig installiert war. Nachdem ich es neu installiert hatte, war das DLL-Problem gelöst.