Основы языка
© 2000-2011, MetaQuotes Software Corp.
170
Импорт функций (#import)
Импорт функций осуществляется из откомпилированных модулей MQL5 (файлы *.ex5) и из
модулей операционной системы (файлы *.dll). Имя модуля указывается в директиве #import. Для
того, чтобы компилятор мог правильно оформить вызов импортируемой функции и организовать
правильную передачупараметров, необходимо полное описание функций. Описания функций
следуют непосредственно за директивой #import "имя модуля". Новая команда #import (можно
без параметров) завершает блок описания импортируемых функций.
#import "имя_файла"
func1 define;
func2 define;
...
funcN define;
#import
Импортируемые функции могут иметь любые имена. Можно одновременно импортировать из
разных модулей функции с одинаковыми именами. Импортируемые функции могут иметь имена,
совпадающие с именами встроенных функций. Операция разрешения контекста определяет, какая
из функций должна вызываться.
Так как импортируемые функции находятся вне компилируемого модуля, компилятор не может
проверить правильность передаваемых параметров. Поэтому, во избежание ошибок выполнения,
необходимо точно описывать состав и порядок параметров, передаваемых в импортируемые
функции. Параметры, передаваемые в импортируемые функции (как из EX5, так и из DLL-
модулей), могут иметь значения по умолчанию.
В импортируемых функциях в качестве параметров нельзя использовать:
указатели (*);
ссылки на объекты, содержащие динамические массивы и/или указатели.
В импортируемые из DLL функции нельзя передавать в качестве параметра классы, массив строк
или сложные объекты, содержащие строки и/или динамические массивы любых типов.
Примеры:
#import "user32.dll"
int MessageBoxW(uint hWnd,string lpText,string lpCaption,uint uType);
#import "stdlib.ex5"
string ErrorDescription(int error_code);
int RGB(int red_value,int green_value,int blue_value);
bool CompareDoubles(double number1,double number2);
string DoubleToStrMorePrecision(double number,int precision);
string IntegerToHexString(int integer_number);
#import "ExpertSample.dll"
int GetIntValue(int);
double GetDoubleValue(double);
string GetStringValue(string);
double GetArrayItemValue(double &arr[],int,int);
bool SetArrayItemValue(double &arr[],int,int,double);
double GetRatesItemValue(double &rates[][6],int,int,int);