我正在尝试通过dll在MT4上运行用C#编写的函数。 dll正确编译,但是当我尝试在MT4上运行它时,我得到了一个未解决的导入调用,无法在TestMe.dll中找到Add
遵循此链接https://www.mql5.com/en/articles/249上的指南, 该dll正在使用,我也从该页面下载了该dll。当我使用已经在网站上编译的dll运行同一程序时,很有趣,代码可以正常运行,但是当我使用在网站上上传的相同代码自己编译dll时,即开始出现错误。
如果您想知道,我确实安装了nugget软件包以启用RGiesecke.DllExport,并且该dll位于mql4库文件夹中,并且还在脚本的“常规”选项卡中启用了“允许dll导入”。
我不知道这一点是否很重要,但是我正在使用Visual Studio Enterprise 2015,并且正在使用.Net Framework 4.5.2
//这是dll的C#代码
using System;
using System.Collections.Generic;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace Test
{
class Test
{
private static List<MqlTick> list;
static Test()
{
list = new List<MqlTick>();
}
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
[DllExport("Sub", CallingConvention = CallingConvention.StdCall)]
public static int Sub(int left, int right)
{
return left - right;
}
[DllExport("AddDouble", CallingConvention = CallingConvention.StdCall)]
public static double AddDouble(double left, double right)
{
return left + right;
}
[DllExport("AddFloat", CallingConvention = CallingConvention.StdCall)]
public static float AddFloat(float left, float right)
{
return left + right;
}
}
}
//这是用于运行dll的MQL4代码
#import "TestMe.dll"
int Add(int left,int right);
int Sub(int left,int right);
float AddFloat(float left,float right);
double AddDouble(double left,double right);
#import
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
for(int i=0; i<3; i++)
{
Print(Add(i,600));
Print(Sub(400,i));
Print(AddDouble(654.5,i));
Print(AddFloat(235.5,-i));
}
}
//+------------------------------------------------------------------+
我总是收到错误消息未解决的导入函数调用在TestMe.dll中找不到Add,我认为它引用了“ Add”,这是第一个要调用的函数
答案 0 :(得分:0)
我终于弄清楚了,MT4仅支持32位dll,而MT5仅支持64位dll。
在Visual Studio中,我的平台目标是“任何CPU”,这导致MT4加载了dll,但在其中找不到任何功能,将平台目标设置为x86即可解决问题。