Скачать MetaTrader 5

Ошибка при подключении самописной DLL-библиотеки

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй свой счет через PayPal
Sergey Andreev
4100
Sergey Andreev 2014.04.08 09:16 

Здравствуйте!

 

Мне нужна помощь с написанием и подключением своей dll –библиотеки к терминалу.

Начали с самого простого, с некоторых абстрактных примеров и сразу столкнулись с проблемой при запуске индикатора с подключенной библиотекой, ошибкой access violation.

Версия терминала x64, билд 910, система win7 x64.

Вот код самой библиотеки, написанной на C++

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define _DLLAPI extern "C" __declspec(dllexport)

_DLLAPI int __stdcall summ(int &res1, int &res2)

{
 return res1 + res2;
}


Вот каким образом я пытаюсь обратиться к внешней функции.

#import "mql_dll.dll"
    int summ(int num1, int num2);
#import

int OnInit()
  {
     int Res = 100;

     int num1 = 1;
     int num2 = 2;
     Res = summ(num1, num2));
     Print(Res);
     return(0);
  }


Получаю ошибку -

Access violation at 0x000007FEF9141010 read to 0x0000000000000001 in 'D:\MT5\MQL5\Libraries\mql_dll.dll'

Опыта интеграции у меня мало, подскажите, пожалуйста, в чем здесь ошибка и как ее исправить чтобы библиотека заработала? Спасибо!

Andrey Voytenko
23090
Andrey Voytenko 2014.04.08 09:36  

Амперсанд уберите здесь:

_DLLAPI int __stdcall summ(int res1, int res2)

или добавьте его здесь:

int summ(int &num1, int &num2);
Матчасть здесь:
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
  • 2010.01.27
  • Renat Fatkhullin
  • www.mql5.com
Так уж сложилось, что сейчас мало кто из разработчиков помнит, как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах продемонстрировать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Покажу пошаговый процесс создания DLL библиотеки в Visual Studio с примерами передачи разных типов переменных (числа, массивы, строки и т.д.) и защиту клиентского терминала от падений в пользовательских DLL.
Sergey Andreev
4100
Sergey Andreev 2014.04.08 09:52  

Спасибо. Бились сутки, сегодня окинули свежим взглядом и поправили!

Ошибка в том, что если вызов по значению и надо передавать значение, и наоборот :)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий