Este código me ha funcionado perfectamente hasta que lo he probado en MT4 build 600, donde ya no verifica las cuentas de mi servidor.
Gracias por tu sugerencia angevoyageur, pero he intentado cambiar todos los ansi 'A' a W pero todavía no hay dados.
Tu problema será con InternetReadFile(). Mira EasyXml.mqh en https://www.mql5.com/en/code/1998 para un ejemplo de como usar las funciones WinInet en el nuevo MQL4 - el código funciona tanto en MQL4 como en MQL5.
En esencia, pasas un array uchar[] a InternetReadFile(), y luego conviertes el array en una cadena usando CharArrayToString(). Lo que en efecto puedes hacer ahora en MQL4 es asignar buffers de memoria gestionados de longitud arbitraria, pasarlos a una DLL, y luego convertir los datos de Ansi o Unicode según corresponda.
En esencia, usted pasa una matriz uchar[] a InternetReadFile(), y luego convierte la matriz a una cadena usando CharArrayToString(). Lo que en efecto puedes hacer ahora en MQL4 es asignar buffers de memoria gestionados de longitud arbitraria, pasarlos a una DLL, y luego convertir los datos de Ansi o Unicode según sea el caso.
Ampliando un poco el tema y la respuesta... en el nuevo MQL4 es posible llamar a las versiones A o W de muchas funciones. Por ejemplo, el siguiente script obtiene el directorio temporal de Windows utilizando tanto las llamadas GetTempPathA como 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); }
Por lo tanto, es posible seguir usando muchas llamadas a la DLL sólo en versión Ansi desde el nuevo MQL4: no es necesario actualizar tanto el código MQL4 como la DLL.
Por lo tanto, es posible seguir utilizando muchas llamadas a la DLL de Ansi desde el nuevo MQL4: no es necesario actualizar tanto el código MQL4 como la DLL.
... Otro ejemplo: pasar valores de cadena a una llamada DLL Ansi desde el nuevo MQL4. (En la vida real, obviamente, sólo llamarías a MessageBoxW en lugar de utilizar esta solución para llamar a MessageBoxA, pero el punto general es útil)
#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); }
He jugado con esto durante unas horas, todavía no hay suerte. Así que sí, buscando contratar a alguien para hacer esto para mí ;)
He jugado con esto durante unas horas, todavía no hay suerte. Así que sí, buscando contratar a alguien para hacer esto para mí ;)
Ver https://www.mql5.com/en/forum/149360 - Estaba a punto de publicar esto como respuesta aquí, pero luego encontré un problema...
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Este código me ha funcionado sin problemas hasta que lo he probado en MT4 build 600, donde ya no verifica las cuentas de mi servidor.