Ce code a fonctionné parfaitement pour moi jusqu'à ce que je le teste dans MT4 build 600, où il ne vérifie plus les comptes de mon serveur.
Merci pour votre suggestion angevoyageur, mais j'ai essayé de changer tous les ansi 'A' en W mais toujours pas de résultat.
Votre problème se situe au niveau de InternetReadFile(). Voir EasyXml.mqh à l'adresse https://www.mql5.com/en/code/1998 pour un exemple d'utilisation des fonctions WinInet dans le nouveau MQL4 - le code fonctionne à la fois dans MQL4 et MQL5.
En substance, vous passez un tableau uchar[] à InternetReadFile(), puis vous convertissez le tableau en une chaîne de caractères à l'aide de CharArrayToString(). Ce que vous pouvez en fait faire maintenant dans MQL4 est d'allouer des tampons de mémoire gérés de longueur arbitraire, de les passer à une DLL, et ensuite de convertir les données d'Ansi ou d'Unicode selon le cas.
En substance, vous passez un tableau uchar[] à InternetReadFile(), puis vous convertissez le tableau en chaîne de caractères à l'aide de CharArrayToString(). Ce que vous pouvez en fait faire maintenant dans MQL4 est d'allouer des tampons de mémoire gérés de longueur arbitraire, de les passer à une DLL, puis de convertir les données d'Ansi ou d'Unicode selon le cas.
En élargissant légèrement le sujet et la réponse... dans le nouveau MQL4, il est possible d'appeler les versions A ou W de nombreuses fonctions. Par exemple, le script suivant obtient le répertoire temporaire de Windows en utilisant à la fois les appels GetTempPathA et GetTempPathW :
#import "kernel32.dll" int GetTempPathA(int,uchar & arr[]); int GetTempPathW(int,short & arr[]); #import void OnStart() { uchar AnsiStringBuffer[256]; GetTempPathA(255, AnsiStringBuffer); string strTempPathFromA = CharArrayToString(AnsiStringBuffer); short UnicodeStringBuffer[256]; GetTempPathW(255, UnicodeStringBuffer); string strTempPathFromW = ShortArrayToString(UnicodeStringBuffer); Print("Temp path via GetTempPathA(): ", strTempPathFromA); Print("Temp path via GetTempPathW(): ", strTempPathFromW); }
Par conséquent, il est possible de continuer à utiliser de nombreux appels DLL uniquement en Ansi à partir du nouveau MQL4 : il n'est pas nécessairement nécessaire de mettre à jour le code MQL4 et la DLL.
Par conséquent, il est possible de continuer à utiliser de nombreux appels DLL Ansi uniquement à partir du nouveau MQL4 : il n'est pas nécessairement nécessaire de mettre à jour à la fois le code MQL4 et la DLL.
... Un autre exemple : passer des valeurs de chaîne dans un appel DLL Ansi à partir du nouveau MQL4. (Dans la vie réelle, il est évident que vous appelleriez MessageBoxW plutôt que d'utiliser cette solution de contournement pour appeler MessageBoxA, mais le point général est utile).
#import "user32.dll" // Declare the Ansi function as taking uchar[] input parameters instead of strings int MessageBoxA(int,uchar & arr1[],uchar & arr2[],int); #import void OnStart() { string strMessage = "Hello"; string strTitle = "Hi!"; // Convert the strings to uchar[] arrays uchar ucMessage[], ucTitle[]; StringToCharArray(strMessage, ucMessage); StringToCharArray(strTitle, ucTitle); MessageBoxA(0, ucMessage, ucTitle, 64); }
J'ai joué avec cela pendant quelques heures maintenant, toujours pas de chance. Donc oui, je cherche à engager quelqu'un pour faire ça pour moi ;)
J'ai joué avec cela pendant quelques heures maintenant, toujours pas de chance. Donc oui, je cherche à engager quelqu'un pour faire ça pour moi ;)
Voir https://www.mql5.com/en/forum/149360 - J'étais sur le point de poster ceci comme réponse ici, mais j'ai trouvé un problème...

- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Ce code a fonctionné parfaitement pour moi jusqu'à ce que je le teste dans MT4 build 600, où il ne vérifie plus les comptes de mon serveur.