Как исправить «Неразрешенный вызов импорта: не удается найти x () в y.dll» в MQL4 - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь запустить функцию, написанную на C # на MT4, с помощью DLL.DLL компилируется правильно, однако, когда я пытаюсь запустить его на MT4, я получаю неразрешенный вызов импорта, не могу найти Добавить в TestMe.dll

Следую руководству по этой ссылке https://www.mql5.com/en/articles/249,, который использует DLLЯ загрузил это также со страницы.Достаточно забавно, когда я запускаю ту же программу, используя dll, уже скомпилированную на сайте, код работает нормально, но когда я сам компилирую dll, используя тот же код, загруженный на веб-сайт, вот когда я начинаю получать ошибку.

Inна случай, если вам интересно, я установил пакет nugget для включения с помощью RGiesecke.DllExport, также у меня есть dll, расположенный в папке библиотек mql4, и я также включил «Разрешить импорт dll» на общей вкладке скрипта.

Я не знаю, важен ли этот бит, но я использую Visual Studio Enterprise 2015 и использую .Net Framework 4.5.2

// Это код C # для dll

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;
        }

    }
}

// Это код MQL4 для запуска dll

#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));
     }
  }
//+------------------------------------------------------------------+

Я всегда получаю сообщение об ошибке Неразрешенный вызов функции импорта Не удается найти Add в TestMe.dll, я полагаю, он ссылается на «Добавить», потому что это первыйвызываемая функция

1 Ответ

0 голосов
/ 21 мая 2019

Я наконец-то понял это, MT4 поддерживает только 32-битные dll, тогда как MT5 поддерживает только 64-битные dll.

В Visual Studio моей целевой платформой было «Любой процессор», из-за чего MT4 загружал dll, но не могне нашел никаких функций в нем, установка цели платформы на x86 решила проблему.

...