Как создать C ++ DLL (с ​​DEV-C ++) и использовать в скрипте MT4 (шаг за шагом)

Я пытаюсь создать свою собственную DLL с помощью инструмента IDE DEV-C ++ и пытаюсь использовать ее внутри скрипта MT4.
Я попытался изучить файл примера [MT4_HOME] \ MQL4 \ Scripts \ examples \ DLL \ DLLSample.cpp, доступный в любой установке MT4, и попытался следовать той же логике с другим сценарием, но безуспешно. Ниже я описываю в мельчайших деталях шаги, которые я выполнил, чтобы быть ясным.
Я хотел бы понять, почему после описанных шагов моя собственная DLL не работает.


Конфигурация системы

  1. Ноутбук с windows 10;
  2. Dev- CCP установлен
  3. MT4 установлен

цели

  1. написать свою собственную dll, используя IDE-инструмент «dev – c ++»;
  2. скомпилировать dll;
  3. используйте DLL в простой скрипт в MT4.

меры

  1. Сначала я создаю на рабочем столе папку с именем mydll;
  2. Я запускаю dev-cpp IDE;
  3. Файл -> Новый -> Проект;
  4. Я выбираю тип проекта -> DLL
  5. Я пишу название проекта: mydll
  6. Я нажимаю кнопку ОК
  7. Затем я выбираю папку, в которую нужно сохранить проект (папка mydll, созданная на рабочем столе на шаге a), и нажимаю сохранить
  8. На этом этапе Dev –C ++ показывает мне два файловых шаблона (dllmain.cpp, dll.h), но я игнорирую их и закрываю, не сохраняя их в проекте. После их закрытия я также удаляю их из инструмента IDE (нажмите кнопку мыши и нажмите «Удалить файл» для каждого из них)
  9. Теперь я кликаю по проекту devc ++ -> Новый файл
  10. Теперь я вставляю в этот файл исходный код моей собственной DLL. (код ниже)
    Примечание. Для тех, кто знаком с metatrader 4, обратите внимание, что этот код является фрагментом файла [MT4_HOME] \ MQL4 \ Scripts \ examples \ DLL \ DLLSample.cpp стандартной установки MT4.

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

  1. Я сохраняю этот файл в папке проекта DEV-C ++ с именем mydll.cpp
  2. Теперь в инструменте DEV-C ++ ide я нажимаю кнопку F9, чтобы скомпилировать этот файл.
  3. Замечания:
    а. процесс компиляции завершается успешно без каких-либо ошибок и предупреждений
    б. некоторые файлы появляются в проекте DEV-C ++ (mydll.dll, libmydll.def, libmydll.a, mydll.o, Makefile.win, mydll.layout).
  4. Теперь я копирую и вставляю mydll.dll в каталог [MT4_HOME] \ MQL4 \ Libraries MT4
  5. Теперь я создаю пустую папку [MT4_HOME] \ MQL4 \ Scripts \ examples \ mydll
  6. Я копирую и вставляю файлы mydll.cpp и libmydll.def в папку [MT4_HOME] \ MQL4 \ Scripts \ examples \ mydll
  7. Наконец, я создаю новый файл с именем mydllTester.mq4 в папке [MT4_HOME] \ MQL4 \ Scripts \ examples \ mydll. Ниже приведен исходный код

#import "DLLTutorial.dll"int    _Z11GetIntValuei(int);
#import

void OnStart()
{
int cnt=_Z11GetIntValuei(int(10));
Comment(cnt);
}

  1. Я открываю файл mydllTester.mq4 с помощью редактора кода MT4 и компилирую файл.
  2. Заключительный тест В качестве последнего шага я делаю тест, чтобы проверить, работает ли он. Я открываю Metatrader4, открываю новый график и просто нажимаю на свой скрипт. Я ожидаю, что число 10 появляется в левом верхнем углу графика, но оно не работает. Можете ли вы помочь мне понять, какой шаг я делаю ошибки?
    Большое вам спасибо. С наилучшими пожеланиями

2

Решение

Наконец, я нашел решение своей проблемы, и теперь я могу написать простую DLL и вызвать ее с MT4 с успехом.
Ниже шаги:

  1. Создать файл mydll.cpp
  2. Напишите содержимое файла mydll.cpp

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

  1. Скомпилируйте файл mydll.cpp (обратите внимание на компиляцию с использованием компилятора «TDM-GCC 32 bit-release», поскольку MT4 является 32-битным приложением и распознает только 32-битные скомпилированные файлы). Компилятор выдаст файлы mydll.dll, libmydll.def

  2. Скопируйте файл mydll.dll в каталог [MT4_HOME] \ MQL4 \ Libraries MT4

  3. Создайте папку «test_script» в каталоге [MT4_HOME] \ MQL4 на MT4 (или в любом месте внутри главной папки MT4)

  4. Скопируйте и вставьте в папку «test_script» файл libmydll.def

  5. Создайте новый скрипт «mydlltester.mq4» внутри папки «test_script»

  6. Напишите содержимое файла «mydlltester.mq4», как показано ниже


#property strict

#import "mydll.dll"int DLLAdd(int i, int j);
#import

void OnStart()
{
Comment(DLLAdd(2,3));
}

  1. Откройте файл «mydlltester.mq4» с помощью компилятора MT4 и скомпилируйте его
  2. Финальный тест: если вы сейчас откроете график в mt4 и запустите скрипт mydlltester, вы увидите сумму 5 в левом верхнем углу графика. Ура !!
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]