调用输入函数
在执行MQL5程序的过程中,客户端较早使用输入函数订阅。这意味着,如果服务器调用输入函数,在程序加载过程中,类似模块(ex5 or dll)就会装载,MQL5和DLL数据库通过调用模块执行。
不推荐使用模块的全部定义名称来加载,比如Drive:\Directory\FileName.Ext。MQL5数据库从terminal_dir\MQL5\Libraries文件夹中加载,如果数据库没有找到,客户端会尝试加载到terminal_dir\experts文件夹中。
系统数据库(DLL)通过操作系统规则加载,如果数据库已经加载完毕(例如,另外的EA交易,甚至是其他的客户端,并联在其中运行),然后到已经建立好的数据库中使用要求,否则,它会按如下顺序搜索:
- 目录,从模块输入点dll开始,该模块是EA交易,脚本,指标或者EX5数据库;
- 目录 terminal__data_directory\MQL5\Libraries (TERMINAL_DATA_PATH\MQL5\Libraries);
- 目录,MT5客户端开始启动;
- 系统目录;
- 窗口目录;
- 当前目录;
- PATH系统变量的目录列表。
如果DLL数据库使用另外的DLL工作,当没有第二个DLL时,第一个不能下载。
在EA交易(脚本,指标)下载后,所有EX5数据库模块的普通列表建立。通过使用加载的EA交易(脚本,指标)和列表数据库,之前加载过多次使用的EX5数据库模块是需要的,数据库使用EA交易(脚本,指标)中的 预定义变量 来调用。
输入数据库EX5在如下列表中搜寻:
- 目录,与建立的EA交易(脚本,指标)路径相关,输入EX5;
- 目录terminal_directory\MQL5\Libraries;
- 目录MQL5\Libraries在所有MT5客户端的共同目录中 (Common\MQL5\Libraries)。
函数 imported DLL在MQL5程序中一定要确定API窗口允许使用,为了确保同意,文本程序添加到C或者C++,使用关键字__stdcall,针对 Microsoft(r) 编译器,该协议具有如下特性:
- 访客(在我们系统中是MQL5程序)应该注意到函数调用的原型(从DLL中输入),为了适当结合参量堆积;
- 访客(在我们系统中是MQL5程序)以倒序方式将参量进行堆积,从右至左-在此命令中,输入函数从参量中传递;
- 参量通过值传递,除了通过引用明确传递(在我们这一排);
- 通过阅读参量传递,输入函数独立清除堆积。
当描述输入函数的原型,可以使用默认参量。
如果类似数据库不能加载,或者DLL禁止使用,或者输入函数没找到-EA交易在分目录(子文件)发出消息“EA交易停止”来停止操作。EA交易在重启后会自动运行,在属性表格打开或者按下确认键之后,EA交易重启后重新编译。
传递参量
所有 简单型 参量通过值传递,除非明确表明通过引用传递,当字符串传递时,缓冲区的地址复制字符串传递,如果字符串通过引用传递,字符串缓冲区的地址不用复制就能从DLL传递输入函数。
结构包括动态数组,字符串,分类和其他复杂结构,和列举对象的静态或者动态数组,不能通过输入函数传递参量。
当传递数组到DLL,数据缓冲区开头的地址总是能传递(不考虑AS_SERIES标签)。在DLL中的函数与AS_SERIES标签无关,传递数组是不明确长度的静态数组,规定数组大小应使用额外参量。