如何修复 MQL4 中的"未解析的导入调用:在 y.dll 中找不到 x() "



我正在尝试通过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解决了问题。

最新更新