库文件搜索顺序
如果指定的库名称不含路径或相对路径,则根据库类型的不同,搜索将根据不同的规则执行。
系统库 (DLL) 是根据操作系统的规则加载的。如果库已经被加载(例如,通过另一个 EA 交易,或者甚至从并行启动的另一个客户端终端),那么调用将转到已经加载的库。否则,搜索将按以下顺序进行:
- 从中导入 DLL 的已编译 EX5 程序的文件夹已启动。
- MQL5/Libraries 文件夹 .
- 正在运行的 MetaTrader 5 终端所在的文件夹。
- 系统文件夹(通常在 Windows 中)。
- Windows 目录。
- 终端进程的当前工作文件夹(可能与终端的位置文件夹不同)。
- PATH 系统变量中列出的文件夹。
在 #import 指令中,不建议使用格式为 Drive:/Directory/FileName.dll 的完全限定可加载模块名。
如果 DLL 在工作中使用了另一个DLL,那么在没有第二个 DLL 的情况下,第一个 DLL 将无法加载。
对导入的 EX5 库的搜索按以下顺序执行:
- 用于启动导入 EX5 程序的文件夹。
- 特定终端实例的 MQL5/Libraries 文件夹。
- 所有 MetaTrader 5 终端 (Common/MQL5/Libraries) 的公共文件夹中的 MQL5/Libraries 文件夹。
在加载一个 MQL 程序之前,会构建一个所有 EX5 库模块的总列表,其中支持的模块既可以从程序本身使用,也可以从该列表中的库使用。它被称为依赖项列表,可以成为一个分支很多的“树”。
对于 EX5 库,终端还提供一次性下载的可重用模块。
无论是什么类型的库,它的每个实例都使用与调用 EA 交易、脚本、服务或指标的上下文相关的本身的数据。库不是共享访问 MQL5 变量或数组的工具。
EX5 库和 DLL 运行在调用模块的线程上。
并没有通用方法在库代码中找出它加载的位置。