sobre la cuestión de long - se puede, pero no es necesario en absoluto, si se utiliza int como un receptor de 4 bytes de algo así de una matriz de caracteres. (es decir, pasas exactamente por el puntero &).
cómo averiguarlo - aquí puedes http://forum.ixbt.com/topic.cgi?id=26:37968
sobre la cuestión de long - se puede, pero no es necesario en absoluto, si se utiliza int como un receptor de 4 bytes de algo así de una matriz de caracteres. (es decir, usted pasa exactamente por el puntero &).
Cómo averiguarlo - aquí puede ser http://forum.ixbt.com/topic.cgi?id=26:37968
Buenas tardes. A pesar de que el artículo fue escrito hace relativamente mucho tiempo, el tema del intercambio de datos con dlls de librerías sigue siendo relevante. Yo mismo me enfrenté hace poco a la necesidad de implementar una determinada funcionalidad y tuve que elegir: escribir mi propia dll o seguir intentando utilizar dlls de librerías. Opté por esta última opción y, naturalmente, me encontré con la dificultad de transferir estructuras y recuperar datos. Después de leer este artículo no entendí bien algunos de los puntos, que en mi opinión son muy complicados. En este artículo, cuando se transfiere una estructura a un entorno externo, se sugiere utilizar un array como área de memoria asignada en la que la función de biblioteca pondrá el resultado y que necesitamos convertir para seguir trabajando. Tengo muy poca experiencia en este campo y quizá mi razonamiento parezca de aficionado, pero aun así expresaré mi opinión con la esperanza de que personas inteligentes me corrijan. Consideremos un ejemplo sencillo mencionado en un viejo artículo https://www.mql5.com/es/articles/1543.
Ese artículo trata el tema de la búsqueda de archivos mediante dlls de bibliotecas. También sugiere pasar un puntero a una matriz del tamaño requerido y luego extraer los datos requeridos de esta matriz.
¿Qué es una estructura? Es la misma sección de memoria. Ahora vamos a intentar cambiar el enfoque de pasar estructuras y recuperar datos:
// Declarar tipo de datos define #define DWORD int #define TCHAR short // Establece este tipo, ya que trabajaremos con unicode #define MAX_PATH (260) // Declarar la estructura FILETIME struct FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; }; // Declarar la estructura de datos de los resultados de búsqueda struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; }; // Al declarar los tipos de datos copiamos las estructuras WinAPI sin ningún cambio // Importar función de biblioteca #import "kernel32.dll" int FindFirstFileW(string path, _WIN32_FIND_DATA& answer); #import //+------------------------------------------------------------------+ //| Función de inicialización experta| //+------------------------------------------------------------------+ int OnInit() { // Crear una variable con el tipo de la estructura creada anteriormente _WIN32_FIND_DATA data; // Llama a la función de la librería, pasando un puntero a nuestra estructura, y de hecho a la memoria asignada int handle = FindFirstFileW(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Experts\\*.mq5", data); if(handle!=-1) { // Ver el resultado de la búsqueda accediendo a los campos de nuestra estructura sin conversión adicional Print("Nombre de archivo encontrado: ", ShortArrayToString(data.cFileName)); Print("Nombre de archivo encontrado temporalmente: ", ShortArrayToString(data.cAlternateFileName)); Print("Tamaño de archivo encontrado: ", data.nFileSizeLow); } //--- return(INIT_SUCCEEDED); } //+-
- 2008.07.15
- MetaQuotes Software Corp.
- www.mql5.com
¿Qué es una estructura en esencia? Es la misma sección de memoria. Ahora vamos a tratar de cambiar el enfoque de pasar estructuras y recuperar datos:
He pegado tu código correctamente a través del editor
He pegado tu código correctamente a través del editor
Muchas gracias. Todavía no he descubierto cómo formatear el código correctamente aquí. (((
Muchas gracias. Todavía no he descubierto cómo codificar correctamente aquí. (((
Cómo insertar el código.
- 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
Artículo publicado Cómo deshacerse del lastre de las DLL caseras:
Si a un programador de MQL5 no le basta con la funcional del lenguaje, entonces deberá recurrir a instrumentos adicionales. Para ello debrá usar otro lenguaje de programación y crear un DLL intermedio. En MQL5 existe un mecanismo de representación de diversos tipos de datos, con ayuda de estructuras y su transmisión a API, pero por desgracia, el MQL5 no responde a la cuestión de cómo extraer los datos del índice adoptado. En este artículo vamos a poner punto final a esta cuestión, mostrando mecanismos sencillos de intercambio de tipos complejos de datos y cómo trabajar con ellos.
Autor: o_O