Я пытаюсь создать свою собственную DLL с помощью инструмента IDE DEV-C ++ и пытаюсь использовать ее внутри скрипта MT4.
Я попытался изучить файл примера [MT4_HOME] \ MQL4 \ Scripts \ examples \ DLL \ DLLSample.cpp, доступный в любой установке MT4, и попытался следовать той же логике с другим сценарием, но безуспешно. Ниже я описываю в мельчайших деталях шаги, которые я выполнил, чтобы быть ясным.
Я хотел бы понять, почему после описанных шагов моя собственная DLL не работает.
Конфигурация системы
цели
меры
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
//---
#define MT4_EXPFUNC __declspec(dllexport)BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
//---
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
//---
return(TRUE);
}
MT4_EXPFUNC int __stdcall GetIntValue(const int ipar)
{
printf("GetIntValue takes %d\n",ipar);
return(ipar);
}
#import "DLLTutorial.dll"int _Z11GetIntValuei(int);
#import
void OnStart()
{
int cnt=_Z11GetIntValuei(int(10));
Comment(cnt);
}
Наконец, я нашел решение своей проблемы, и теперь я могу написать простую DLL и вызвать ее с MT4 с успехом.
Ниже шаги:
#include <stdlib.h>
#ifdef __cplusplus
extern "C"{
#endif
__declspec(dllexport) int __stdcall DLLAdd(int i, int j) ;
#ifdef __cplusplus
}
#endif
__declspec(dllexport) int __stdcall DLLAdd(int i, int j)
{
return i+j;
}
Скомпилируйте файл mydll.cpp (обратите внимание на компиляцию с использованием компилятора «TDM-GCC 32 bit-release», поскольку MT4 является 32-битным приложением и распознает только 32-битные скомпилированные файлы). Компилятор выдаст файлы mydll.dll, libmydll.def
Скопируйте файл mydll.dll в каталог [MT4_HOME] \ MQL4 \ Libraries MT4
Создайте папку «test_script» в каталоге [MT4_HOME] \ MQL4 на MT4 (или в любом месте внутри главной папки MT4)
Скопируйте и вставьте в папку «test_script» файл libmydll.def
Создайте новый скрипт «mydlltester.mq4» внутри папки «test_script»
Напишите содержимое файла «mydlltester.mq4», как показано ниже
#property strict
#import "mydll.dll"int DLLAdd(int i, int j);
#import
void OnStart()
{
Comment(DLLAdd(2,3));
}
Других решений пока нет …