搭好VPS,上传EA,双击一挂,结果弹窗“DLL imports are not allowed”或者“DLL调用失败”。EA图标直接变灰,或者笑脸变哭脸。这种情况,只要你做量化交易,迟早会遇到。我也是在一次给客户部署EA时被这个报错折腾了整整一个下午,最后在注册表里找到的解法,网上很少有文章会提到这一步。
下面是我自己整理的一套从浅到深的排查流程,按这个顺序走,基本上能解决90%以上的DLL加载问题。
第一步:EA属性的“允许DLL导入”是不是真勾上了?
这是最基础的一步,但往往最容易被忽略。很多人以为全局设置好了,就默认所有EA都能跑。
在MT4的导航器(Ctrl+N)里找到你的EA,右键点“属性”或者“修改”。弹出来的窗口里切到“通用”选项卡,找到 “允许DLL导入” 这个复选框,打上勾。
这里有个坑:这个设置是跟随EA文件的,不是全局的。你有5个EA就得勾5次。如果你是从别的电脑复制过来的EA,这个设置不会跟着走,必须手动再点一次。
第二步:检查MT4主程序的“自动交易”总开关
属性勾上了还不行,还要看MT4自己有没有把自动交易功能禁用掉。
第三步:MT4安全模型的第二层——系统级DLL开关
如果前面的都做了,EA还是报错“DLL imports are not allowed”,报错信息出现在“专家”选项卡里(视图->专家),说明你碰到了MT4的第二层安全防护。
MT4对DLL有双层管理:
1. 用户层(EA属性里的勾)。
2. 系统层(选项里的全局开关)。
关键操作: 打开 工具 -> 选项 -> 智能交易系统。看中间区域有一个 “允许导入外部DLL”。这个东西是全局的总闸。如果这里是灰色的或者没勾,那EA属性里再怎么勾都没用。
第四步:Windows权限问题——以管理员身份运行
有一回我帮客户部署EA,在他本地电脑上跑得好好的,上传到VPS(Windows Server 2022)上就一直报文件访问错误(File access error)。看日志是EA在尝试往`MQL4\Files`文件夹里写入记录文件的时候卡住了。
这时候不是MT4的问题,是Windows的权限机制挡住了EA的DLL去调用系统资源。
解法很简单: 找到MT4的桌面快捷方式,右键 -> 属性 -> 兼容性 -> 勾选 “以管理员身份运行此程序”。然后重启MT4。这能解决绝大部分因为权限不够而导致的DLL无法正常加载的情况。
第五步:独家视角——修改注册表强制解除限制(Windows UC环境)
这是很多官方教程里不会写,但我亲身验证过有效的一招。特别是当你的VPS是Windows Server版本,或者系统组策略被托管服务商锁死的时候,你会发现“工具->选项”里的“允许导入外部DLL”可能是灰色的,甚至你改了,重启MT4又变回去了。
这说明MT4读取的配置被系统策略覆盖了。MQL4官方文档不会告诉你这件事,但MT4实际上会去读取注册表里的一个键值来确定是否允许DLL。
我在排查一个韩国客户的EA时发现的这个问题。那个EA需要调用一个加密狗DLL,Windows Server 2019默认的DEP(数据执行保护)和UAC(用户账户控制)策略压得死死的。最后我靠改注册表解决的:
注意: 这一步相当于强行把MT4的系统层DLL开关打开。操作前请确保你的EA来源可靠。改完之后关掉注册表,重启MT4,再看“选项”里的那个开关,应该就变成强制开启状态了。
第六步:检查VC++运行库(很多EA卡死的真凶)
有的EA不报错,但就是没有交易动作。日志里没有任何DLL报错,看起来加载成功了,但实际上DLL内部的初始化函数根本没跑起来。
这种情况十有八九是 Microsoft Visual C++ Redistributable 没装全。大部分用C++写的DLL依赖这个东西。
第七步:看“专家”日志里的具体错误码
以上都操作完,重启MT4,挂上EA。这时候如果还不行,就看“专家”选项卡里的最后几行日志。
参考来源:
EA跑不起来无非就是这几个关卡堵住了。别嫌麻烦,按步骤走一遍,下次再遇到DLL报错,你第一时间就能判断出问题出在哪一环了。
*本文首发于FXEAR.com,原创内容,未经授权禁止转载。*