- Macro de substitution (#define)
- Propriétés du Programme (#property)
- Inclure des Fichiers (#include)
- Importer des Fonctions (#import)
- Compilation Conditionnelle (#ifdef, #ifndef, #else, #endif)
Importer une Fonction (#import)
Les fonctions sont importées depuis des modules MQL5 compilés (fichiers *.ex5) et des modules du système d'exploitation (fichiers *.dll). Le nom du module est spécifié dans la directive #import. Pour que le compilateur puisse former correctement l'appel à la fonction importée et organiser la transmission des paramètres correctement, la description complète des fonctions est nécessaire. Les descriptions des fonctions suivent immédiatement la directive #import "nom_module". La nouvelle commande #import (peut être sans paramètres) termine le bloc des descriptions des fonctions importées.
#import "nom_du_fichier"
|
Les fonctions importées peuvent avoir plusieurs noms. Les fonctions ayant le même nom mais des modules différents peuvent être importés en même temps. Les fonctions importées peuvent avoir des noms qui correspondent aux noms des fonctions intégrées. L'opération de résolution de portée définit quelles fonctions doivent être appelées.
L'ordre de recherche d'un fichier spécifié après le mot-clé #import est décrit dans Appel des Fonction Importées.
Puisque les fonctions importées sont en dehors du module compilé, le compilateur ne peut pas vérifier la validité des paramètres passés. Donc, pour éviter des erreurs d'exécution (runtime), la composition et l'ordre des paramètres passés aux fonctions importés doivent être décrits de façon précise. Les paramètres passés aux fonctions importées (à la fois des modules EX5 et DLL) peuvent avoir des valeurs par défaut.
Les suivants ne peuvent pas être utilisés comme paramètres des fonctions importées :
- pointeurs (*);
- liens vers des objets contenant des tableaux dynamiques et/ou des pointeurs.
Les classes, tableaux de chaînes de caractères ou d'objets complexes qui contiennent des chaînes de caractères et/ou des tableaux dynamiques de n'importe quels types ne peuvent pas être passés comme paramètres aux fonctions importées des DLL.
Exemples :
#import "stdlib.ex5"
|
Pour importer des fonctions pendant l'exécution d'un programme mql5, la liaison anticipée (early binding) est utilisée. Cela signifie que la bibliothèque est chargée pendant le chargement d'un programme utilisant son programme ex5.
Il n'est pas recommandé d'utiliser le nom qualifié complet (fully qualified name) du module chargeable du type Lecteur:\Répertoire\NomFichier.Ext. Les bibliothèques MQL5 sont chargées à partir du répertoire rep_terminal\MQL5\Libraries.
Si la fonction importée a des versions d'appel différentes pour les versions de Windows 32 et 64 bits, les deux doivent être importées et la bonne version de la fonction sera appelée explicitement avec la variable _IsX64.
Exemple :
#import "user32.dll"
|
Importer des fonctions de bibliothèques .NET
Pour utiliser les fonctions des bibliothèques .NET, importez simplement la DLL sans définir de fonctions spécifiques. MetaEditor importe automatiquement toutes les fonctions utilisables :
- Structures simples (POD, plain old data) structures qui ne contiennent que des types de données simples.
- Fonctions statiques publiques ayant des paramètres, dans lesquelles seuls des types simples et des structures POD, ou leurs tableaux, sont utilisés.
Pour appeler des fonctions de la bibliothèque, il suffit de l'importer :
#import "TestLib.dll"
|
Le code C# de la fonction Inc de TestClass ressemble à:
public class TestClass
|
Le script retourne la valeur 42 comme résultat de l'exécution.
Voir aussi