gpt4 book ai didi

c# - 如何使 VPS 上的 Metatrader 终端使用 c# DLL?

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:22 30 4
gpt4 key购买 nike

状态:

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

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


目标:

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

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

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

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

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

是什么阻止了 DLL 在 VPS 上运行?

谢谢!!


问题隔离:

我在 VPS 上写了一个简短的 C# 程序以检查 DLL
它 ( DLL ) 工作得很好。

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

所以问题一定是在 MetaTrader 终端DLL 之间。

最佳答案

基于给定的输入,

冲突出现在其他工作的 MT4/DLL 合作方案上,毫无疑问,防火墙不是罪魁祸首。 DLL 机制不包含防火墙所关心的操作。

为了避免任何 在 VPS 上 通常 不受您控制的 Win 服务器设置
移动您的 DLL - 文件到最安全的位置,
最近对 New 的更改-MQL4.56789 已成为默认位置不安全
- 所以不要依赖将文件直接放在 MT4 ~终端目录~/MQL4/Library 正如您在 localhost

上所习惯的那样

当心嵌套的 DLL 调用

Call of Imported Functions
To import functions during the execution of a mql4-program, the client terminal uses early binding. This means that if a program has call of an imported function, the corresponding module (ex4 or dll) is loaded during the program load. MQL4 and DLL libraries are executed in the thread of a calling module.

It is not recommended to use the fully specified name of the module to be loaded like Drive:\Directory\FileName.Ext. The MQL4 libraries are loaded from the terminal_dir\MQL4\Libraries folder. If the library hasn't been found, then the client terminal performs an attempt to load it from terminal_dir\experts folder.

The system libraries (DLL) are loaded by the operating system rules. If the library is already loaded (for example, another Expert Advisor, and even from another client terminal, running in parallel), then it uses requests to the library already loaded. Otherwise, it performs a search in the following sequence:
- Directory, from which the module importing dll was started. The module here is an Expert Advisor, a script, an indicator or EX4 library;
- Directory terminal_data_directory\MQL4\Libraries (TERMINAL_DATA_PATH\MQL4\Libraries);
- Directory, from which the MetaTrader 4 client terminal was started;
- System directory;
- Windows directory;
- Current directory;
- Directories listed in the PATH system variable.

If the DLL library uses another DLL in its work, the first one cannot be loaded in case when there is no second DLL.

不得已

万一所有的努力都失败了,一个可靠的方法可以使 VPS 托管的解决方案独立于 VPS 提供商的约束工作,并最大限度地减少他们潜在的无响应风险的影响,将整个马戏团安装在您的 -受控 VM(通常是一个带有整个工作解决方案的简约 wXP 配置的虚拟客户机,或者您可以“en-can”一个工作的本地主机安装(不是您的整个笔记本,而是一个测试机器))

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


在 linux 中使用 WINE thin-wrapped 操作怎么样?

虽然在项目上进行了测试并且工作顺利,但我不会从另一种方法开始,例如 linux/WINE 薄包装 MetaTrader Terminal 4 操作(实际上嵌入了 .EXE进入一个 DLL - 由周围的 WINE/linux 适配器群背后的非 Win O/S 服务的抽象)因为主要任务是消除 DLL 冲突的根源。

关于c# - 如何使 VPS 上的 Metatrader 终端使用 c# DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27081704/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com