如何使VPS上的Metatrader终端使用c#DLL? 地位:

如何使VPS上的Metatrader终端使用c#DLL? 地位:,c#,dll,vps,algorithmic-trading,mql4,C#,Dll,Vps,Algorithmic Trading,Mql4,我用C#编写了一个DLL,它是从用MQL4编写的代码(基本上是一种类似C的语言)调用的,并发回一些数据(非托管到托管再返回) 通常,DLL将查询发送到MySQL主机,并在需要时返回一些数据。我使用了NuGet包“非托管导出”。 我将这个DLL与外汇交易MetaTrader Terminal程序一起使用,运行在Windows 8.1 x64上,一切都运行得很好。C#代码是在x86中编译的,因为MetaTrader终端只在x86上运行 目标: 现在我对使用相同的DLL感兴趣,并使用相同的代码调用它

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

通常,
DLL
将查询发送到
MySQL
主机,并在需要时返回一些数据。我使用了NuGet包“非托管导出”。 我将这个
DLL
与外汇交易MetaTrader Terminal程序一起使用,运行在Windows 8.1 x64上,一切都运行得很好。C#代码是在x86中编译的,因为MetaTrader终端只在x86上运行


目标: 现在我对使用相同的
DLL
感兴趣,并使用相同的代码调用它,但这次我需要从VPS运行代码

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

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

<>我还安装了微软Visual C++ 2010可重新分发,希望这会有所帮助,但我还在这里…… 也没有防火墙可以阻止对主机的访问

什么会阻止
DLL
在VPS上运行

谢谢


问题隔离: 为了检查
DLL

它(
DLL
)工作得很好,我在VPS上编写了一个简短的C程序

我知道MetaTrader终端确实能够识别
DLL
,因为否则我会收到一个关于基本问题的错误

因此,根据给定的输入,问题一定在MetaTrader终端和
DLL

之间, 合作方案中的MT4/DLL将出现冲突,毫无疑问,防火墙不应为此负责<代码>DLL机制不包含防火墙关心的操作

为了避免任何Win Server设置(VPS上的通常超出您的控制范围)
DLL
-文件移动到最安全的位置,
最近对New-
MQL4.56789
所做的更改使默认位置不安全
-因此,不要像您在
本地主机上习惯的那样,依赖将文件放在MT4~终端目录
/MQL4/库

注意嵌套的
DLL
调用

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

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

系统库(DLL)由操作系统规则加载。如果库已经加载(例如,另一个专家顾问,甚至来自另一个并行运行的客户端终端),那么它将使用对已加载库的请求。否则,它将按以下顺序执行搜索:
-目录,从中启动模块导入dll。这里的模块是专家顾问、脚本、指示器或EX4库
-目录终端\u数据\u目录\MQL4\Libraries(终端\u数据\u路径\MQL4\Libraries)
-目录,从中启动MetaTrader 4客户端终端
-系统目录
-Windows目录
-当前目录
-PATH系统变量中列出的目录。

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

终极手段 如果所有努力都失败了,确保VPS托管解决方案独立于VPS提供商约束工作,并将其潜在不响应风险的影响降至最低的可靠方法是,将整个马戏团安装在受控VM内(通常是一个最低限度的wXP配置的虚拟客户机,带有整个工作解决方案,或者您可以“en can”一个工作的本地主机安装(不是您的整个笔记本,而是一台测试机))

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


linux内部的WINE瘦包装操作如何?
虽然在项目中经过测试并工作顺利,但我不会从另一种类似linux/WINE瘦包装MetaTrader Terminal 4操作的方法开始(事实上,它将
.EXE
嵌入
DLL
-由周围一群WINE/linux适配器后面的非Win O/S提供的抽象)因为主要任务是消除DLL冲突的根源。

相对于MT4,您的DLL文件在VPS目录结构上的确切位置是什么?