Разделяемое использование ресурсов разных MQL-программ

Имя ресурса — уникально во всем терминале. Позже мы научимся создавать ресурсы не на стадии компиляции (директивой #resource), а динамически с помощью функции ResourceCreate, но в любом случае ресурс объявляется в контексте создающей его программы, так что уникальность полного имени обеспечивается автоматически, за счет привязки к файловой системе (пути и имени конкретного ex5-файла).

Любая MQL-программа может не только сама содержать ресурсы и использовать их, но обращаться к ресурсам другой откомпилированной программы (ex5-файла). Это возможно при условии, когда использующая ресурс программа знает путь размещения и название другой программы, содержащей требуемый ресурс, а также имя этого ресурса.

Таким образом, терминал обеспечивает важное свойство ресурсов — их разделяемое использование: ресурсы из одного ex5-файла можно задействовать во многих других программах.

Для того чтобы использовать ресурс из стороннего ex5-файла, его нужно указать в виде "путь_имя_файла.ex5::имя_ресурса". Например, пусть в скрипте DrawingScript.mq5 указан ресурс-картинка в файле triangle.bmp:

#resource "\\Files\\triangle.bmp"

Тогда его имя для использования в самом скрипте будет выглядеть как "::Files\\triangle.bmp".

Чтобы использовать этот же ресурс из другой программы, например, эксперта, нужно перед именем ресурса добавить путь к ex5-файлу скрипта относительно папки MQL5 каталога данных терминала и имя самого скрипта (в откомпилированном виде DrawingScript.ex5). Пусть скрипт лежит в стандартной папке MQL5/Scripts/, тогда обращение к картинке следует выполнять с помощью строки "\\Scripts\\DrawingScript.ex5::Files\\triangle.bmp". Расширение ".ex5" опционально.

Если при обращении к ресурсу другого ex5-файла путь к этому файлу не указан, то такой файл ищется в той же папке, где находится обратившаяся за ресурсом программа. Например, если предположить, что тот же советник находится в стандартной папке MQL5/Experts/ и делает запрос ресурса без указания пути (например, так — "DrawingScript.ex5::Files\\triangle.bmp"), то это приведет к поиску DrawingScript.ex5 в папке MQL5/Experts/.

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

Обратите внимание, что для загрузки ресурса из MQL-программы не требуется её запускать: для чтения ресурсов достаточно самого наличия ex5-файла с ресурсами.

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