- Declaración de constante (#define)
- Propiedades de programas (#property)
- Inclusión de archivos (#include)
- Importación de funciones (#import)
- Compilación condicional (#ifdef, #ifndef, #else, #endif)
Importación de funciones (#import)
Las funciones se importan desde los módulos compilados MQL5 (archivos *.ex5) y desde los módulos del sistema operativo (archivos *.dll). El nombre del módulo se indica en la directiva #import. Para que el compilador pueda hacer correctamente la llamada a la función importada y organizar el correcto traspaso de parámetros, hace falta la descripción completa de las funciones. La descripción de la función sigue directamente después de la directiva #import "nombre de módulo". El nuevo comando #import (puede ir sin parámetros) cierra el bloque de descripción de las funciones importadas.
#import "nombre_de_archivo"
|
Las funciones importadas pueden tener cualquier nombre. Las funciones con nombres iguales pueden ser importadas a la vez desde diferentes módulos. Las funciones importadas pueden tener nombres que coincidan con los nombres de las funciones built-in. La operación de resolución de contexto determina cuál de las funciones tiene que ser invocada.
La orden de búsqueda del archivo especificado tras la palabra clave #import se describe en la sección Llamadas a las funciones importadas.
Dado que las funciones importadas se encuentran fuera del módulo compilado, el compilador no puede comprobar si los parámetros pasados son correctos. Así que para evitar los errores de ejecución, hay que describir con exactitud la composición y el orden de los parámetros pasados a las funciones importadas. Los parámetros pasados a funciones importadas (tanto de EX5, como de DLL-módulos) pueden tener valores por defecto.
En funciones importadas no se puede usar lo siguiente en calidad de parámetros:
- punteros (*);
- referencias a objetos que contienen arrays dinámicos y/o punteros.
Las clases, arrays de cadenas o objetos complejos que contienen las cadenas y/o arrays dinámicos de cualquier tipo no se puede pasar como parámetros a las funciones importadas de DLL.
Ejemplos:
#import "stdlib.ex5"
|
Para importar funciones durante la ejecución del programa mql5 se usa la aligación temprana. Eso significa que la biblioteca se carga durante el proceso de carga del programa ex5 que la utilice.
No se recomienda usar el nombre totalmente calificado del módulo cargable del tipo Drive:\Directory\FileName.Ext. Las bibliotecas MQL5 se cargan de la carpeta terminal_dir\MQL5\Libraries.
Si la función importada tiene diferentes variantes de llamada para las versiones de 32 y 64 bits de Windows, entonces será necesario importar ambas y llamar de forma explícita la variante necesaria de la función con la ayuda de la variable _IsX64.
Ejemplo:
#import "user32.dll"
|
Importando funciones de bibliotecas .NET
Para trabajar con las funciones de una biblioteca .NET, basta con importar la propia DLL sin indicar funciones concretas. El MetaEditor importará automáticamente todas las funciones con las que se pueda trabajar:
- Las estructuras sencillas (POD, plain old data), son estructuras que contienen solo tipos sencillos de datos.
- Las funciones estáticas públicas en cuyos parámetros se usan solo tipos sencillos y estructuras POD o sus matrices.
Para llamar las funciones de una biblioteca, solo tiene que importarlas:
#import "TestLib.dll"
|
El código C# de la función Inc de la clase TestClass tiene el aspecto siguiente:
public class TestClass
|
Como resultado de la ejecución, el script retornará el valor 42.
Véase también