Порядок поиска файлов библиотек

Если имя библиотеки указано без пути или с относительным путем, поиск производится по различным правилам в зависимости от типа библиотеки.

Системные библиотеки (DLL) загружаются по правилам операционной системы. Если библиотека уже загружена (например, другим экспертом и даже из другого клиентского терминала, запущенного параллельно), то обращение идет к уже загруженной библиотеке. В противном случае поиск идет в следующей последовательности:

  1. Папка, из которой была запущена откомпилированная EX5-программа, импортирующая DLL;
  2. Папка MQL5/Libraries;
  3. Папка, где находится запущенный терминал MetaTrader 5;
  4. Системная папка (обычно внутри Windows);
  5. Каталог Windows;
  6. Текущая рабочая папка процесса терминала (может отличаться от папки размещения терминала);
  7. Папки, перечисленные в системной переменной PATH.

В директивах #import не рекомендуется использовать полностью квалифицированное имя загружаемого модуля вида Drive:/Directory/FileName.dll.

Если библиотека DLL использует в своей работе другую DLL, то в случае отсутствия второй DLL первая не сможет загрузиться.

Поиск импортируемой библиотеки EX5 производится в следующей последовательности:

  1. Папка запуска импортирующей EX5-программы;
  2. Папка MQL5/Libraries конкретного экземпляра терминала;
  3. Папка MQL5/Libraries в общей папке всех терминалов MetaTrader 5 (Common/MQL5/Libraries).

Перед загрузкой MQL-программы формируется общий список всех библиотечных модулей EX5, которые предполагается использовать как из самой программы, так и из библиотек из этого списка. Он называется списком зависимостей и может стать очень разветвленным "деревом".

Для EX5-библиотек терминалом также обеспечивается однократная загрузка многократно используемых модулей.

Вне зависимости от типа библиотеки, в каждом её экземпляре идет работа с собственными данными, относящимися к контексту вызвавшего эксперта, скрипта, сервиса или индикатора. Библиотеки не являются инструментом для разделяемого доступа к переменным или массивам MQL5.

Библиотеки EX5 и DLL выполняются в потоке вызывающего модуля.

Не предусмотрено штатных средств, чтобы выяснить в коде библиотеки, откуда она загружена.