J'utilise Metatrader 5 build 3815 sur wine-8.0.1 dans Ubuntu 64-bit 20.04.6 LTS.
Dans mon Expert Advisor, j'utilise une fonction d'une DLL C# importée (.NET Framework 4.8). Indépendamment de ce que fait la fonction exportée, l'Expert fonctionne bien la première fois que je le lance, et la deuxième fois, Metatrader 5 se plante. Le débogueur n'a jamais atteint les points d'arrêt dans l'Expert avant que Metatrader 5 ne se plante.
Il semble que certaines ressources liées à la DLL ne soient pas libérées après la désinitialisation de l'Expert.
#import "Test.dll"#import
intOnInit()
{
// La deuxième exécution se bloque si cette ligne est utiliséePrint("DLL function result: ", TestStatic::TestFunc());
// pas de crash de la deuxième exécution si cette ligne est utilisée//Imprimez("aucune fonction DLL utilisée") ;return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason){}
voidOnTick() {}
Je travaille avec Metatrader 5 build 3815 sur wine-8.0.1 dans Ubuntu 64-bit 20.04.6 LTS.
Dans mon Expert Advisor, j'utilise une fonction d'une DLL C# importée (.NET Framework 4.8). Indépendamment de ce que fait la fonction exportée, l'Expert fonctionne bien la première fois que je le lance, et la deuxième fois, Metatrader 5 se plante. Le débogueur n'a jamais atteint les points d'arrêt dans l'Expert avant que Metatrader 5 ne s'arrête.
Il semble que certaines ressources liées à la DLL ne soient pas libérées après la désinitialisation de l'Expert.
Existe-t-il un moyen de résoudre ce problème ?
Code de la DLL C# :
Code Expert Advisor :
Je suppose qu'un redémarrage de Windows par le vin suffira...
Je travaille avec Metatrader 5 build 3815 sur wine-8.0.1 dans Ubuntu 64-bit 20.04.6 LTS.
Dans mon Expert Advisor, j'utilise une fonction d'une DLL C# importée (.NET Framework 4.8). Indépendamment de ce que fait la fonction exportée, l'Expert fonctionne bien la première fois que je le lance, et la deuxième fois, Metatrader 5 se plante. Le débogueur n'a jamais atteint les points d'arrêt dans l'Expert avant que Metatrader 5 ne s'arrête.
Il semble que certaines ressources liées à la DLL ne soient pas libérées après la désinitialisation de l'Expert.
Existe-t-il un moyen de résoudre ce problème ?
Code de la DLL C# :
Code du conseiller expert :
Oui, je connais le problème.
Votre DLL ne gère pas correctement les messages de chargement et de déchargement.
Il vous manque le code minimum requis pour un chargement et un déchargement corrects des DLL.
Il vous manque le code minimum requis pour charger et décharger correctement les DLL.
Avez-vous des spécifications ou un exemple de code expliquant comment faire cela correctement ? Parce que les spécifications de MQL5 disent le contraire. De même, mon expérience me permet de dire le contraire : J'utilise des bibliothèques .NET dans plusieurs projets MQL5 et cela fonctionne comme prévu sous Windows 8.1/10/11.
Je le supprime manuellement d'un graphique ou je l'arrête avec le débogueur - le résultat est le même dans les deux cas.
Avez-vous des spécifications ou un exemple de code expliquant comment faire cela correctement ? Parce que les spécifications de MQL5 disent le contraire. C'est également ce que m'a appris mon expérience : J'utilise des bibliothèques .NET dans plusieurs projets MQL5 et cela fonctionne comme prévu sous Windows 8.1/10/11.
Je le supprime manuellement d'un graphique ou je l'arrête avec le débogueur - le résultat est le même dans les deux cas.
Avez-vous des spécifications ou un exemple de code expliquant comment faire cela correctement ? Parce que les spécifications de MQL5 disent le contraire. C'est également ce que m'a appris mon expérience : J'utilise des bibliothèques .NET dans plusieurs projets MQL5 et cela fonctionne comme prévu sous Windows 8.1/10/11.
Ce que vous constaterez probablement, c'est que la DLL n'est pas détachée du processus qui se termine.
J'ai été confronté à ce problème avec mysqlclient.dll et j'ai pu comprendre que le testeur de stratégie ne détache pas proprement la DLL. Il semble plutôt que Terminal charge la DLL, et c'est là qu'elle reste chargée.
Je vous invite à faire des recherches à ce sujet, car je ne peux plus confirmer sur les anciennes versions du client, car elles ne fonctionnent plus à ce jour. Par conséquent, je n'ai actuellement aucune possibilité de reproduire le problème de l'époque.
Vous constaterez probablement que la DLL n'est pas détachée du processus qui se termine.
J'ai été confronté à ce problème avec mysqlclient.dll et j'ai pu constater que le testeur de stratégie ne détache pas proprement la DLL. Il semble plutôt que Terminal charge la DLL, et c'est là qu'elle reste chargée.
Je vous invite à faire des recherches à ce sujet, car je ne peux plus confirmer sur les anciennes versions du client, car elles ne fonctionnent plus à ce jour. Par conséquent, je n'ai actuellement aucune possibilité de reproduire le problème de l'époque.
Honte à moi. J'ai découvert que .NET Framework n'était pas correctement installé sur le préfixe Wine où j'exécute le terminal Metatrader 5. Après l'avoir réinstallé, le problème de DLL a été résolu.
WStranger #: Honte à moi. J'ai découvert que .NET Framework n'était pas correctement installé sur le préfixe Wine où j'exécute le terminal Metatrader 5. Après l'avoir réinstallé, le problème de DLL a été résolu.
Merci quand même pour votre aide !
Merci d'avoir signalé ce problème, je ne le savais pas.
J'ai essayé, ça n'a pas aidé. Tous les deux lancements d'EA depuis le démarrage du terminal aboutissent à un crash, même après wineboot
Dominik Christian Egert #:
Je le supprime manuellement à partir d'un graphique ou je l'arrête avec le débogueur - le résultat est le même dans les deux cas.
Dominik Christian Egert#:
Je le supprime manuellement d'un graphique ou je l'arrête avec le débogueur - le résultat est le même dans les deux cas.
Avez-vous des spécifications ou un exemple de code expliquant comment faire cela correctement ? Parce que les spécifications de MQL5 disent le contraire. C'est également ce que m'a appris mon expérience : J'utilise des bibliothèques .NET dans plusieurs projets MQL5 et cela fonctionne comme prévu sous Windows 8.1/10/11.Je le supprime manuellement d'un graphique ou je l'arrête avec le débogueur - le résultat est le même dans les deux cas.
Avez-vous des spécifications ou un exemple de code expliquant comment faire cela correctement ? Parce que les spécifications de MQL5 disent le contraire. C'est également ce que m'a appris mon expérience : J'utilise des bibliothèques .NET dans plusieurs projets MQL5 et cela fonctionne comme prévu sous Windows 8.1/10/11.Honte à moi. J'ai découvert que .NET Framework n'était pas correctement installé sur le préfixe Wine où j'exécute le terminal Metatrader 5. Après l'avoir réinstallé, le problème de DLL a été résolu.