Discussion de l'article "MetaTrader 5 sur Linux" - page 24

 
Bonjour à tous !
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.
Existe-t-il un moyen de résoudre ce problème ?

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

int OnInit()
  {
   // La deuxième exécution se bloque si cette ligne est utilisée
   Print("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);
  }
void OnDeinit(const int reason){}
void OnTick() {}

 
WStranger #:
Bonjour à tous !
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...


 
Dominik Christian Egert #:
Je suppose qu'un redémarrage de Windows par le vin suffira...


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 un redémarrage de wine.
 
WStranger #:
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
Je ne suis pas sûr, mais je pense que j'ai eu le même problème sur windows que well....

Mais je ne me souviens pas comment je l'ai résolu. Ou si je l'ai résolu d'ailleurs....

Comment terminez-vous l'EA ?
 
WStranger #:
Bonjour à tous !
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.


 

Dominik Christian Egert #:

Comment mettre fin à l'EA ?

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

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

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.

EDIT :

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

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.
 
Dominik Christian Egert #:
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.
Merci quand même pour votre aide !
WineHQ - .NET Framework 4.8
  • appdb.winehq.org
Open Source Software for running Windows applications on other operating systems.
 
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.