Diskussion zum Artikel "MetaTrader 5 auf Linux" - Seite 24

 
Hallo zusammen!
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.
Gibt es eine Möglichkeit, dies zu beheben?

C# DLL-Code:
namespace Test
{
    public static class TestStatic
    {
        public static string TestFunc()
        {
            return "test return value";
        }
    }
}
Expert Advisor-Code:
#import "Test.dll"
#import

int OnInit()
  {
   // 2. Lauf stürzt ab, wenn diese Zeile verwendet wird
   Print("DLL function result: ", TestStatic::TestFunc());
   
   // kein Absturz im 2. Lauf, wenn diese Zeile verwendet wird
   //Drucken("keine DLL-Funktionen verwendet");
   
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason){}
void OnTick() {}

 
WStranger #:
Hallo zusammen!
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...


 
Dominik Christian Egert #:
Ich schätze, ein Neustart von Windows wird es tun...


Versucht, hat nicht geholfen. Jeder zweite EA-Start seit dem Terminal-Start führt zu einem Crush, auch nach wineboot
 
WStranger #:
Versucht, hat nicht geholfen. Jeder zweite EA-Start seit dem Terminal-Start führt zu einem Crush, auch nach Wineboot
Ich bin mir nicht sicher, aber ich glaube, ich hatte das gleiche Problem unter Windows, auch unter .....

Aber ich kann mich nicht erinnern, wie ich es gelöst habe. Oder ob ich es überhaupt gelöst habe....

Wie beendest du den EA?
 
WStranger #:
Hallo zusammen!
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.


 

Dominik Christian Egert #:

Wie kann man den EA beenden?

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#:

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 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.
 
WStranger #:

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.

EDIT:

https:// learn.microsoft.com/en-us/windows/win32/dlls/dllmain
 
WStranger #:

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.
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.
 
Dominik Christian Egert #:
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.
Trotzdem vielen Dank für Ihre Hilfe!
WineHQ - .NET Framework 4.8
  • appdb.winehq.org
Open Source Software for running Windows applications on other operating systems.
 
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.
Trotzdem vielen Dank für Ihre Hilfe!
Nun, danke für den Bericht, das wusste ich nicht.