Программы MQL5
© 2000-2011, MetaQuotes Software Corp.
352
Вызов импортируемых функций
Для импорта функций во время выполнения mql5-программы используется раннее связывание.
Это значит, что если в программе есть вызов импортируемой функции, то соответствующий
модуль (ex5 или dll) загружается в процессе загрузки программы. Библиотеки MQL5 и DLL
выполняются в потоке вызывающего модуля.
Не рекомендуется использовать полностью квалифицированное имя загружаемого модуля вида
Drive:\Directory\FileName.Ext. Библиотеки MQL5 загружаются из папки terminal_dir\MQL5\Libraries
. Если библиотека не была найдена, то производится попытка загрузить библиотеку из папки
terminal_dir\experts.
Системные библиотеки (DLL) загружаются по правилам операционной системы. Если библиотека
уже загружена (например, другим экспертом и даже из другого клиентского терминала,
запущенного параллельно), то обращение идет к уже загруженной библиотеке. В противном
случае поиск идет в следующей последовательности:
1. Директория из которой был запущен модуль, импортирующий dll. Под модулем понимается
эксперт, скрипт, индикатор или библиотека EX5;
2. Директория каталог_данных_терминала\MQL5\Libraries (TERMINAL_DATA_PATH\MQL5
\Libraries);
3. Директория, из которой был запущен клиентский терминал MetaTrader 5;
4. Системная директория;
5. Директория Windows;
6. Текущая директория;
7. Директории, перечисленные в системной переменной PATH.
Если библиотека DLL использует в своей работе другую DLL, то в случае отсутствия второй DLL
первая не сможет загрузиться.
Перед загрузкой эксперта (скрипта, индикатора) формируется общий список всех библиотечных
модулей EX5, которые предполагается использовать как из загружаемого эксперта (скрипта,
индикатора), так и из библиотек из этого списка. Таким образом обеспечивается однократная
загрузка многократно используемых библиотечных модулей EX5. Библиотеки пользуются
предопределенными переменными вызвавшего их эксперта (скрипта, индикатора).
Поиск импортируемой библиотеки EX5 производится в следующей последовательности:
1. Директория, путь к которой задается относительно директории импортирующего EX5 эксперта
(скрипта, индикатора);
2. Директория каталог_терминала\MQL5\Libraries;
3. Директория MQL5\Libraries в общей директории всех клиентских терминалов MetaTrader 5
(Common\MQL5\Libraries).
Функции, импортируемые из DLL в mql5-программу, должны обеспечивать соглашение о связях,
принятое для функций Windows API. Для обеспечения такого соглашения в исходном тексте
программ, написанных на языках C или C++ используется ключевое слово __stdcall, которое
является специфическим для компиляторов от фирмы Microsoft(r). Обсуждаемое соглашение о
связях характеризуется следующим:
вызывающая функция (в нашем случае mq5-программа) должна "видеть" прототип вызываемой