¡En MQL5 siempre hay espacio para un exploit ! ;) - página 5

 
sergeev:

No creo que sea así. No se pueden empujar megabytes de información a través de OBJ_TEXT.

el candidato más cercano son los recursos

Nota: un punto es en realidad una estructura repleta de variables de diferentes tipos. Se guarda cuando se cierra/abre el terminal y también se guarda en una plantilla.

 
DC2008:

Nota: un punto es en realidad una estructura repleta de variables de diferentes tipos. Se guarda cuando se cierra/abre el terminal y también se guarda en la plantilla.

?
 
sergeev:

Sigo preguntando, ¿han encontrado ya una solución para DLL 32/64?

Hay una especie de WOW32reg.exe en el sistema (\System32\). He dado vueltas y vueltas, no responde a -h -?, no he podido registrar nada a ciegas.

Google también es silencioso, no he podido encontrar nada en microsoft.com... así que está bastante bien.

 
sergeev:
?

¿Qué no está claro? ¿Me das una tarea concreta, pero todo es un camino de ida y vuelta...?

 
MetaDriver:

Sigo preguntando, ¿han encontrado ya una solución para DLL 32/64?

Hay una especie de WOW32reg.exe en el sistema (\System32\). He dado vueltas y vueltas, no responde a -h -?, no he podido registrar nada a ciegas.

Google también es silencioso, no he podido encontrar nada en microsoft.com... en general, es agudo.

Es sólo una idea, no lo he probado. Después de detectar la profundidad de bits del terminal, utilice LoadLibrary para cargar dinámicamente la DLL.

 
MetaDriver:

Sigo preguntando, ¿habéis encontrado ya una solución para el DLL 32/64?

¿Cuál es el problema aquí?

En la importación se especifican dos funciones idénticas, sólo que con parámetros diferentes (int/long). En el programa, dependiendo de los 32/64 bits, se llama a la función correspondiente.

 
MetaDriver:

Sigo preguntando, ¿habéis encontrado ya una solución para el DLL 32/64?

El código para llamar a funciones desde las del viento (al pasarles punteros) - encontrado.

Gracias al contexto:: todo se resuelve de forma ordenada.


Yurich:

En la importación se especifican dos funciones idénticas, sólo que con parámetros diferentes (int/long). En el programa, dependiendo de los 32/64 bits, se llama a la función correspondiente.


Por ejemplo, así:

#import "MemMap32.dll"
int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import "MemMap64.dll"
int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import

// переопределяем вызовы для контроля битности
int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if (_IsX64) return(MemMap64::MemRead(h, v, pos, sz, error)); return(MemMap32::MemRead((HANDLE32)h, v, pos, sz, error));  }
en un código que se llama con contexto explícito ::.

::MemRead(...)


Es decir, no multiplicamos los nombres de las funciones, sino que hacemos una autodetección de la tasa de bits y llamamos a la importada correcta.

 
MetaDriver:

Sigo preguntándome, ¿habéis encontrado ya una solución para 32/64 DLL?

La forma más fácil es poner DLLs x32 y x64 del mismo nombre en diferentes directorios del sistema Windows - SysWOW64 y System32, respectivamente.

Pero el intercambio de datos entre programas es realmente un problema, sobre todo si se aborda de forma aleatoria.
Así que probablemente razonado y Microsoft, cuando en los años noventa del siglo pasado, pasó de un archivo, el intercambio de flujo de objeto - OLE de ella a ActiveX -> COM -> COM + -> .NET, es decir, sobre la base de una tecnología de intercambio entre programas han creado un nuevo sistema de programación y ejecución de código.

 
Yurich:

¿Cuál es el problema aquí?

En la importación se especifican dos funciones idénticas, sólo que con parámetros diferentes (int/long). En el programa, se llama a la función adecuada según el tamaño de los bits de 32/64.

No quiere cargar la de 32 bits en absoluto, y no quiere ejecutar el programa aunque no vaya a llamarlo (la dll) ya.

Si"Permitir el uso de DLL" no está marcado, el botón [OK] no se muestra en absoluto, sólo se cancela. Permitir, haga clic en Aceptar - el programa se bloquea. Bloqueo.

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


En realidad, lo ideal sería poder llamar a dll32 en el terminal x64. Sé que es teóricamente posible, pero no sé cómo.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver:

No quiere cargar la de 32 bits en absoluto, y no quiere ejecutar el programa aunque no vaya a llamarlo más (dll).

Cuando"Permitir dll" está desmarcado, el botón [OK] no se muestra en absoluto, sólo se cancela. Permitir, haga clic en Aceptar - el programa se bloquea. Bloqueo.


Lo ideal sería poder llamar a dll32 en el terminal x64. Sé con seguridad que es teóricamente posible, pero no sé cómo.

Acabo de comprobarlo:
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
La biblioteca no se carga, pero todo funciona hasta que se llama a su función (salida de TEST);

Ahora llamamos a la función de dicha biblioteca:
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version