Я пытаюсь запустить функцию, написанную на 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, я полагаю, он ссылается на «Добавить», потому что это первыйвызываемая функция