如何使VPS上的元交易者终端使用c# DLL
本文关键字:终端 DLL 交易者 何使 VPS | 更新日期: 2023-09-27 18:31:35
>状态:
我用C#写了一个DLL
,它是从用MQL4
(基本上是一种类似C语言)编写的代码中调用的,并发回一些数据(非托管到托管并返回)。
通常,DLL
将查询发送到MySQL
-host,并在需要时返回一些数据。我使用了 NuGet 包"非托管导出"。我将这个DLL
与外汇交易MetaTrader终端程序一起使用,该程序运行在Windows 8.1 x64上,一切都运行良好。C# 代码是用 x86 编译的,因为 MetaTrader 终端只在 x86 上运行。
目标:
现在我有兴趣使用相同的DLL
并使用相同的代码调用它,但这次我需要代码从 VPS 运行。
此VPS在Windows Server 2008 R2 SP1 x64上运行。
除此之外,一切都是一样的:
相同版本的MetaTrader终端,
我什至在这个VPS
上安装了VS 2013(与我在笔记本电脑上使用的版本相同),并编译了C#代码没有问题。
我还安装了 Visual C++ 2010 可再发行Microsoft,希望这会有所帮助,但我仍然在这里......
也没有防火墙可以阻止对主机的访问。
是什么阻止DLL
在VPS上运行?
谢谢!!
问题隔离:
我在VPS上写了一个简短的C#程序来检查DLL
。
它(DLL
)效果很好。
我知道 MetaTrader 终端确实可以识别DLL
,否则我会收到有关该基本问题的错误。
所以问题一定出在MetaTrader终端和DLL
之间。
基于给出的输入,
合作计划MT4/DLL
出现合作,毫无疑问,防火墙不应该受到指责。 DLL
机制不包含防火墙负责的操作。
为了避免VPS上通常不受您控制
的任何Win Server设置,请将DLL
文件移动到最安全的位置,
最近对New-MQL4.56789
的更改使默认位置不安全
- 所以不要依赖将文件直接放置在MT4~终端目录~/MQL4/Library
,就像您在localhost
上习惯的那样
当心嵌套的DLL
调用
导入函数
的调用 要在执行 mql4 程序期间导入函数,客户端使用早期绑定。这意味着,如果程序调用了导入的函数,则会在程序加载期间加载相应的模块(ex4 或 dll)。MQL4 和 DLL 库在调用模块的线程中执行。
不建议使用要加载的模块的完全指定名称,如 Drive:''Directory''FileName.Ext。MQL4 库是从 terminal_dir''MQL4''Libraries 文件夹加载的。如果尚未找到该库,则客户端会尝试从 terminal_dir''experts 文件夹加载它。
系统库 (DLL) 由操作系统规则加载。如果函数库已经加载(例如,另一个 EA 交易,甚至来自另一个客户端,并行运行),那么它使用对已加载的函数库的请求。否则,它将按以下顺序执行搜索:
- 从中启动模块导入 dll 的目录。这里的模块是一个智能交易系统、一个脚本、一个指标或 EX4 函数库;
- 目录terminal_data_directory''MQL4''库(TERMINAL_DATA_PATH''MQL4''库);
- MetaTrader 4 客户端从中启动的目录;
- 系统目录;
- 视窗目录;
- 当前目录;
- PATH 系统变量中列出的目录。
如果 DLL 库在其工作中使用另一个 DLL,则在没有第二个 DLL 的情况下,无法加载第一个 DLL。
最后的手段
如果所有努力都失败了,一种可靠的方法可以使VPS托管的解决方案独立于VPS提供商的约束工作,并最大程度地减少其潜在无响应风险的影响,将整个马戏团安装在您控制的VM中(通常是具有整个工作解决方案的简约wXP配置的虚拟来宾机,或者您可以"en-can"一个工作的本地主机安装(不是整个笔记本, 而是一台测试机)
唯一需要的调整是虚拟机管理程序系统的VPS主机安装(VmWare WorkStation或VM-Player)以及协调的IP寻址,这应该不是根据需要匹配免费IP-s/端口#-s的问题。
在 Linux 内部进行 WINE 薄包装操作怎么样?
虽然在项目上经过测试并顺利工作,但我不会从另一种类似于linux/WINE薄包装的MetaTrader终端4操作的方法开始(实际上.EXE
嵌入到一个DLL
抽象中,由周围的WINE/linux适配器后面的非Win O/S提供),因为主要任务是消除DLL冲突的根源。