Как побороть ошибку Cannot find 'Add' in 'Test1.dll' ?

 

Все сделал так, как здесь:

https://www.mql5.com/ru/articles/249

Ошибка в МТ4:

Cannot find 'Add' in 'Test1.dll'

В чем может быть проблема?

Раньше вроде бы прокатывало, теперь нет. Правда пользовался VS более ранней версии чем 2017

Пробовал и МТ4 и МТ5. Ошибка идентична.

VS 2017, вот код на C#:

using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace Test1
{
    class Class1
    {
        [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;
        }
    }
}

Как открыть мир C# из MQL5 путем экспорта неуправляемого кода
Как открыть мир C# из MQL5 путем экспорта неуправляемого кода
  • www.mql5.com
Долгое время я искал простое решение, которое позволило бы мне использовать в MQL5 управляемые (managed) DLL, написанные на C#. После чтения множества статей, когда я уже был готов реализовать обертку (wrapper) для управляемой DLL на С++ , я наткнулся на блестящее решение, сэкономившее мне много часов работы. Предлагаемое решение является...
 

Ну и MQL

#property strict
#property version "1.0"
#import "Test1.dll"
  int Add(int left,int right);
#import
//+------------------------------------------------------------------+
int OnInit()
{
   OnTick();
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
void OnTimer()
{
}
//+------------------------------------------------------------------+
void OnTick()
{
   Print(Add(3,666));
   return;
}

 

Пробовал и по другому пути.

DLL-ку собрал, но ошибка та же.

 
Renat Akhtyamov:

Пробовал и по другому пути.

DLL-ку собрал, но ошибка та же.

Для начала в проекте установить с++/cli. Кажется так, под рукой VS нет.
 
Yuriy Asaulenko:
Для начала в проекте установить с++/cli. Кажется так, под рукой VS нет.

в 2015 пишешь?

Просто снес 17-ое, поставил 10-ое.

Открываю ранее написанный мною проект, говорит, что написано на более поздней версии.

пробую 2015 установить...

 
Yuriy Asaulenko:
Для начала в проекте установить с++/cli. Кажется так, под рукой VS нет.

Для чего это надо? при условии что проект на C#. Может я чего не понимаю, просвети пожалуйста.

 
Renat Akhtyamov:

в 2015 пишешь?

Просто снес 17-ое, поставил 10-ое.

Открываю ранее написанный мною проект, говорит, что написано на более поздней версии.

пробую 2015 установить...

Не парься со сносом VS, я пробовал разные версии VS, код RGiesecke ни на одной в MQL не экспортирует.

Нужно @Vasiliy Sokolov звать, он вроде на C# давно пилит.

 
Nikolay Demko:

Не парься со сносом VS, я пробовал разные версии VS, код RGiesecke ни на одной в MQL не экспортирует.

Нужно Соколова звать, он вроде на C# давно пилит.

у меня работали DLL-ки на МТ. Обфускацию и ExportDLL пользовал. Неделю парюсь, не получается ни так ни сяк.
 
Renat Akhtyamov:
у меня работали DLL-ки на МТ. Обфускация и ExportDLL пользовал. Неделю парюсь, не получается ни так ни сяк.

а старые работают Dll? может бага в новом билде а не в VS.

 
Nikolay Demko:

а старые работают Dll?

да, работает
 
Renat Akhtyamov:
да, работает

Тогда попробуй старые проекты, скомпилить ещё раз, и проверить работают ли. Если да то по старому примеру.

Или там что то не устраивает?

Причина обращения: