我正在尝试通过DLL在MT4上写入C#的函数。DLL正确编译,但是当我尝试在MT4上运行它时,我会收到一个未解决的导入调用,找不到添加testme.dll
正在遵循此链接上的指南https://www.mql5.com/en/articles/249,DLL正在使用我也从页面下载了它。当我使用已经在网站上编译的DLL运行相同的程序时,代码运行良好,但是当我使用上传在我开始遇到错误时上传的相同代码来编译DLL时,该代码运行良好。
如果您想知道,我确实安装了掘金软件包,以使用rgiesecke.dllexport启用,我也安装了MQL4 Libraries文件夹中的DLL,并且还启用了"允许dll imports"。P>
我不知道这个位是否很重要,但是正在使用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",因为它是第一个被称为
我终于弄清楚了,MT4仅支持32位DLL,而MT5仅支持64位DLL。
在Visual Studio中,我的平台目标是"任何CPU",这导致MT4加载DLL,但找不到其中的任何功能,将平台目标设置为X86解决了问题。