Discussione sull’articolo "MetaTrader 5 su Linux" - pagina 24

 
Ciao a tutti!
Sto utilizzando Metatrader 5 build 3815 su wine-8.0.1 in Ubuntu 20.04.6 LTS a 64 bit.
Nel mio Expert Advisor utilizzo una funzione importata da una DLL C# (.NET Framework 4.8). Indipendentemente da ciò che fa la funzione esportata, l'Expert funziona bene la prima volta che lo lancio, mentre la seconda volta Metatrader 5 si blocca. Il debugger non ha mai raggiunto i punti di interruzione nell'Expert prima che Metatrader 5 si blocchi.
Sembra che alcune risorse relative alla DLL non vengano rilasciate dopo la deinizializzazione di Expert.
C'è un modo per risolvere questo problema?

Codice DLL C#:
namespace Test
{
    public static class TestStatic
    {
        public static string TestFunc()
        {
            return "test return value";
        }
    }
}
Codice del consulente esperto:
#import "Test.dll"
#import

int OnInit()
  {
   // Il secondo run si blocca se viene usata questa riga
   Print("DLL function result: ", TestStatic::TestFunc());
   
   // nessun arresto anomalo della seconda esecuzione se si usa questa riga
   //Stampa("nessuna funzione DLL utilizzata");
   
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason){}
void OnTick() {}

 
WStranger #:
Ciao a tutti!
Sto utilizzando Metatrader 5 build 3815 su wine-8.0.1 in Ubuntu 20.04.6 LTS a 64 bit.
Nel mio Expert Advisor utilizzo una funzione importata da una DLL C# (.NET Framework 4.8). Indipendentemente da ciò che fa la funzione esportata, l'Expert funziona bene la prima volta che lo lancio, mentre la seconda volta Metatrader 5 si blocca. Il debugger non raggiunge mai i punti di interruzione nell'Expert prima che Metatrader 5 si blocchi.
Sembra che alcune risorse relative alla DLL non vengano rilasciate dopo la deinizializzazione di Expert.
C'è un modo per risolvere questo problema?

Codice DLL C#:
Codice Expert Advisor:

Immagino che un riavvio di wine windows sia sufficiente...


 
Dominik Christian Egert #:
Immagino che un riavvio di wine windows lo farà...


Ho provato, ma non è servito. Ogni secondo lancio di EA dall'avvio del terminale risulta in un crush, anche dopo il riavvio di wine.
 
WStranger #:
Ho provato, ma non è servito. Ogni secondo lancio di EA dall'avvio del terminale risulta in un crush, anche dopo il wineboot.
Non sono sicuro, ma credo di aver avuto lo stesso problema anche su windows....

Ma non ricordo come l'ho risolto. O se l'ho risolto, se è per questo....

Come si chiude l'EA?
 
WStranger #:
Ciao a tutti!
Sto utilizzando Metatrader 5 build 3815 su wine-8.0.1 in Ubuntu 20.04.6 LTS a 64 bit.
Nel mio Expert Advisor utilizzo una funzione importata da una DLL C# (.NET Framework 4.8). Indipendentemente da ciò che fa la funzione esportata, l'Expert funziona bene la prima volta che lo lancio, mentre la seconda volta Metatrader 5 si blocca. Il debugger non raggiunge mai i punti di interruzione nell'Expert prima che Metatrader 5 si blocchi.
Sembra che alcune risorse relative alla DLL non vengano rilasciate dopo la deinizializzazione di Expert.
C'è un modo per risolvere questo problema?

Codice DLL C#:
Codice Expert Advisor:

Sì, so qual è il problema.

La DLL non gestisce correttamente i messaggi di caricamento e scaricamento.

Manca il codice minimo richiesto per il corretto caricamento e scaricamento delle DLL.


 

Dominik Christian Egert #:

Come si chiude l'EA?

Lo cancello manualmente da un grafico o lo interrompo con il debugger: il risultato è lo stesso in entrambi i casi.

Dominik Christian Egert#:

Manca il codice minimo necessario per caricare e scaricare correttamente le DLL.
Avete qualche specifica o esempio di codice che spieghi come farlo correttamente? Perché le specifiche di MQL5 dicono il contrario. Anche la mia esperienza dice il contrario: Sto usando le librerie .NET in più progetti MQL5 e funziona come previsto in Windows 8.1/10/11.
 
WStranger #:

Lo cancello manualmente da un grafico o lo fermo con il debugger: il risultato è lo stesso in entrambi i casi.

Avete qualche specifica o esempio di codice che spieghi come farlo correttamente? Perché le specifiche di MQL5 dicono il contrario. Anche la mia esperienza dice il contrario: Sto utilizzando le librerie .NET in più progetti MQL5 e funziona come previsto in Windows 8.1/10/11.

EDIT:

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

Lo cancello manualmente da un grafico o lo fermo con il debugger: il risultato è lo stesso in entrambi i casi.

Avete qualche specifica o esempio di codice che spieghi come farlo correttamente? Perché le specifiche di MQL5 dicono il contrario. Anche la mia esperienza dice il contrario: Sto utilizzando le librerie .NET in diversi progetti MQL5 e funziona come previsto in Windows 8.1/10/11.
Quello che probabilmente scoprirete è che la DLL non viene staccata dal processo che termina.

Ho lottato con questo problema con mysqlclient.dll e sono riuscito a capire che il tester della strategia non stacca la DLL in modo pulito. Sembra piuttosto che il Terminale stia caricando la DLL e che questa rimanga caricata.

Vi prego di fare qualche ricerca in merito, perché non posso più confermare le vecchie versioni del client, in quanto ad oggi non funzionano più. Pertanto, al momento non ho la possibilità di riprodurre il problema di allora.
 
Dominik Christian Egert #:
Probabilmente si scoprirà che la DLL non è stata staccata dal processo di terminazione.

Ho avuto a che fare con questo problema con mysqlclient.dll e sono riuscito a capire che il tester della strategia non stacca la DLL in modo pulito. Sembra piuttosto che il terminale stia caricando la DLL e che questa rimanga caricata.

Vi prego di fare qualche ricerca in merito, perché non posso più confermare le vecchie versioni del client, in quanto ad oggi non funzionano più. Pertanto, al momento non ho la possibilità di riprodurre il problema di allora.
Mi vergogno. Ho capito che .NET Framework non era installato correttamente sul prefisso di Wine dove eseguo il terminale Metatrader 5. Dopo averlo reinstallato, il problema della DLL è stato risolto.
Grazie comunque per l'aiuto!
WineHQ - .NET Framework 4.8
  • appdb.winehq.org
Open Source Software for running Windows applications on other operating systems.
 
WStranger #:
Mi vergogno. Ho capito che .NET Framework non era installato correttamente sul prefisso Wine dove eseguo il terminale Metatrader 5. Dopo averlo reinstallato, il problema della DLL è stato risolto. Dopo averlo reinstallato, il problema della DLL è stato risolto.
Grazie comunque per il tuo aiuto!
Grazie per avermelo segnalato, non lo sapevo.