- Макроподстановка (#define)
- Свойства программ (#property)
- Включение файлов (#include)
- Импорт функций (#import)
- Условная компиляция (#ifdef, #ifndef, #else, #endif)
Импорт функций (#import)
Импорт функций осуществляется из откомпилированных модулей MQL5 (файлы *.ex5) и из модулей операционной системы (файлы *.dll). Имя модуля указывается в директиве #import. Для того чтобы компилятор мог правильно оформить вызов импортируемой функции и организовать правильную передачу параметров, необходимо полное описание функций. Описания функций следуют непосредственно за директивой #import "имя модуля". Новая команда #import (можно без параметров) завершает блок описания импортируемых функций.
#import "имя_файла"
|
Импортируемые функции могут иметь любые имена. Можно одновременно импортировать из разных модулей функции с одинаковыми именами. Импортируемые функции могут иметь имена, совпадающие с именами встроенных функций. Операция разрешения контекста определяет, какая из функций должна вызываться.
Порядок поиска файла, указанного после ключевого слова #import, описан в разделе Вызов импортируемых функций.
Так как импортируемые функции находятся вне компилируемого модуля, компилятор не может проверить правильность передаваемых параметров. Поэтому, во избежание ошибок выполнения, необходимо точно описывать состав и порядок параметров, передаваемых в импортируемые функции. Параметры, передаваемые в импортируемые функции (как из EX5, так и из DLL-модулей), могут иметь значения по умолчанию.
В импортируемых функциях в качестве параметров нельзя использовать:
- указатели (*);
- ссылки на объекты, содержащие динамические массивы и/или указатели.
В импортируемые из DLL функции нельзя передавать в качестве параметра классы, массив строк или сложные объекты, содержащие строки и/или динамические массивы любых типов.
Примеры:
#import "stdlib.ex5"
|
Для импорта функций во время выполнения mql5-программы используется раннее связывание. Это значит, что библиотека загружается в процессе загрузки использующей ее ex5-программы.
Не рекомендуется использовать полностью квалифицированное имя загружаемого модуля вида Drive:\Directory\FileName.Ext. Библиотеки MQL5 загружаются из папки terminal_dir\MQL5\Libraries.
Если импортируемая функция имеет разные варианты вызова для 32-х и 64-х битной версий Windows, то необходимо импортировать оба и явно вызывать нужный вариант функции с помощью переменной _IsX64.
Пример:
#import "user32.dll"
|
Импорт функций из .NET библиотек
Для работы с функциями .NET библиотеки достаточно импортировать саму DLL без указания конкретных функций. MetaEditor автоматически импортирует все функции, с которыми возможна работа:
- Простые структуры (POD, plain old data) – структуры, которые содержат только простые типы данных.
- Публичные статические функции, в параметрах которых используются только простые типы и структуры POD или их массивы
Для вызова функций из библиотеки просто импортируйте ее:
#import "TestLib.dll"
|
C# код функции Inc класса TestClass выглядит следующим образом:
public class TestClass
|
В результате выполнения скрипт вернет значение 42.
Смотри также