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

时间:2019-05-19 22:19:38

标签: c# mql4

我正在尝试通过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”,这是第一个要调用的函数

1 个答案:

答案 0 :(得分:0)

我终于弄清楚了,MT4仅支持32位dll,而MT5仅支持64位dll。

在Visual Studio中,我的平台目标是“任何CPU”,这导致MT4加载了dll,但在其中找不到任何功能,将平台目标设置为x86即可解决问题。