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.
#import "Test.dll"#import
intOnInit()
{
// Il secondo run si blocca se viene usata questa rigaPrint("DLL function result: ", TestStatic::TestFunc());
// nessun arresto anomalo della seconda esecuzione se si usa questa riga//Stampa("nessuna funzione DLL utilizzata");return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason){}
voidOnTick() {}
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...
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.
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.
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.
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.
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.
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.
Ho provato, ma non è servito. Ogni secondo lancio di EA dall'avvio del terminale risulta in un crush, anche dopo il wineboot.
Dominik Christian Egert #:
Lo cancello manualmente da un grafico o lo interrompo con il debugger: il risultato è lo stesso in entrambi i casi.
Dominik Christian Egert#:
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.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.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.