Questo codice ha funzionato perfettamente per me fino a quando l'ho provato in MT4 build 600, dove non verifica più i conti dal mio server.
Grazie per il tuo suggerimento angevoyageur, ma ho provato a cambiare tutte le 'A' ansi in W ma ancora niente da fare.
Il tuo problema sarà con InternetReadFile(). Vedere EasyXml.mqh su https://www.mql5.com/en/code/1998 per un esempio di come usare le funzioni WinInet nel nuovo MQL4 - il codice funziona sia in MQL4 che in MQL5.
In sostanza, si passa un array uchar[] a InternetReadFile(), e poi si converte l'array in una stringa usando CharArrayToString(). Quello che si può fare in effetti ora in MQL4 è allocare buffer di memoria gestita di lunghezza arbitraria, passarli ad una DLL, e poi convertire i dati da Ansi o Unicode a seconda dei casi.
In sostanza, si passa un array uchar[] a InternetReadFile(), e poi si converte l'array in una stringa usando CharArrayToString(). Quello che si può fare in effetti ora in MQL4 è allocare buffer di memoria gestita di lunghezza arbitraria, passarli a una DLL, e poi convertire i dati da Ansi o Unicode a seconda dei casi.
Allargando leggermente l'argomento e la risposta... nel nuovo MQL4 è possibile chiamare le versioni A o W di molte funzioni. Per esempio, il seguente script ottiene la directory temporanea di Windows usando entrambe le chiamate GetTempPathA e 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); }
Pertanto, è possibile continuare ad usare molte chiamate alla DLL solo Ansi dal nuovo MQL4: non c'è necessariamente bisogno di aggiornare sia il codice MQL4 che la DLL.
Pertanto, è possibile continuare ad usare molte chiamate alla DLL solo Ansi dal nuovo MQL4: non è necessariamente necessario aggiornare sia il codice MQL4 che la DLL.
... Un altro esempio: passare valori di stringa in una chiamata DLL Ansi dal nuovo MQL4. (Nella vita reale si dovrebbe ovviamente chiamare MessageBoxW piuttosto che usare questo workaround per chiamare MessageBoxA, ma il punto generale è 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); }
Ho giocato con questo per un paio d'ore, ancora nessuna fortuna. Quindi sì, sto cercando di assumere qualcuno che lo faccia per me ;)
Ho giocato con questo per un paio d'ore, ancora nessuna fortuna. Quindi sì, sto cercando di assumere qualcuno che lo faccia per me ;)
Vedi https://www.mql5.com/en/forum/149360 - Stavo per postarlo come risposta qui, ma poi ho trovato un problema...
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Questo codice ha funzionato perfettamente per me fino a quando l'ho provato in MT4 build 600, dove non verifica più i conti dal mio server.