2

地位:

我用DLLC# 编写了一个,它可以从用 a (基本上是一种类似 C 的语言)编写的代码中调用,MQL4并发送回一些数据(非托管到托管并返回)。

通常,DLL发送查询到MySQL-host 并在需要时返回一些数据。我使用了NuGet包“ Unmanaged Exports ”。我将它DLL与 FOREX 交易MetaTrader Terminal程序一起使用,在 Windows 8.1 x64 上运行,一切正常。MetaTrader Terminal由于仅在 x86 上运行,因此 C# 代码在 x86 中编译。


目标:

现在我有兴趣使用DLL相同的代码并使用相同的代码调用它,但这次我需要从 VPS 运行代码。

此 VPS 在 Windows Server 2008 R2 SP1 x64 上运行。

除此之外一切都是一样的:
相同的版本MetaTrader Terminal
我什至在这个 VPS 上安装了 VS 2013(与我在笔记本电脑上使用的版本相同)
并毫无问题地编译了 C# 代码。

我还安装了 Microsoft Visual C++ 2010 Redistributable,希望这会有所帮助,但我还在这里......

也没有防火墙可以阻止对主机的访问。

什么可能阻止DLL在 VPS 上运行?

谢谢!!


问题隔离:

我在 VPS 上编写了一个简短的 C# 程序,以便检查DLL.
它 ( DLL) 效果很好。

我知道MetaTrader Terminal确实可以识别,DLL因为否则我会收到有关该基本问题的错误。

所以问题一定在MetaTrader Terminal和之间DLL

4

1 回答 1

1

根据给定的输入,

在其他可行的合作计划中出现了冲突MT4/DLL,毫无疑问,防火墙不应受到指责。DLL机制不包含防火墙所关心的操作。

为了避免VPS 上的任何 Win Server 设置通常不受您的控制
请将您的DLL-file(s) 移动到最安全的位置,
最近对New的更改-MQL4.56789使默认位置不安全
- 所以不要依赖将文件正确放置到 MT4 ~Terminal Directory~/MQL4/Library就像你习惯的那样localhost

当心嵌套DLL调用

导入函数的调用
为了在 mql4 程序执行期间导入函数,客户端使用早期绑定。这意味着如果程序调用了导入的函数,则在程序加载期间会加载相应的模块(ex4 或 dll)。MQL4 和 DLL 库在调用模块的线程中执行。

不建议使用要加载的模块的完全指定名称,如 Drive:\Directory\FileName.Ext。MQL4 库从 terminal_dir\MQL4\Libraries 文件夹加载。如果未找到该库,则客户端会尝试从 terminal_dir\experts 文件夹加载它。

系统库 (DLL) 由操作系统规则加载。如果库已经加载(例如,另一个 EA 交易,甚至来自另一个客户端,并行运行),那么它使用对已加载库的请求。否则,它会按以下顺序执行搜索:
-导入 dll 的模块从该目录开始。这里的模块是 EA 交易、脚本、指标或 EX4 库
- 目录 terminal_data_directory\MQL4\Libraries (TERMINAL_DATA_PATH\MQL4\Libraries);
- MetaTrader 4 客户端启动的目录;
- 系统目录;
- Windows 目录;
- 当前目录;
- PATH 系统变量中列出的目录。

如果 DLL 库在其工作中使用另一个 DLL,则在没有第二个 DLL 的情况下无法加载第一个 DLL。

最后一招

万一所有努力都失败了,一种确保 VPS 托管解决方案独立于 VPS 提供者约束的工作的可靠方法,以便最大限度地减少其潜在无响应风险的影响,将整个 circus 安装在您控制的 VM 内(通常是带有整个工作解决方案的简约 wXP 配置虚拟访客机,或者您可以“en-can”工作 localhost 安装(不是整个笔记本,而是测试机))

唯一需要的调整是 Hypervisor 系统(VmWare WorkStation 或 VM-Player)的 VPS 主机安装以及协调的 IP 寻址,根据需要匹配免费 IP-s/port#-s 应该不是问题。


linux 内部的 WINE 瘦包装操作怎么样?

虽然在项目上经过测试并且工作顺利,但我不会从其他方法开始,如 linux/WINE 薄包装的 MetaTrader 终端 4 操作(实际上嵌入.EXEDLL由非 Win O/S 提供的 -abstraction 服务于周围的 WINE/ linux 适配器),因为主要任务是消除 DLL 冲突的根源。

于 2015-12-14T06:12:40.663 回答