[英]How to create C++ DLL (with DEV -C++) and use in MT4 script (Step by step)
我试图使用DEV-C ++ IDE工具创建自己的DLL,并尝试在MT4脚本中使用它。 我尝试研究任何MT4安装中可用的示例文件[MT4_HOME] \\ MQL4 \\ Scripts \\ Examples \\ DLL \\ DLLSample.cpp,并且尝试对其他脚本遵循相同的逻辑,但没有成功。 在下面,我将非常详细地描述我所遵循的步骤,以使其更加清楚。 我想了解为什么执行上述步骤后我自己的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位发行版”编译器进行编译,因为MT4是32位应用程序,并且它仅理解32位已编译文件)。 编译器将生成文件mydll.dll,libmydll.def
将文件mydll.dll复制到MT4的[MT4_HOME] \\ MQL4 \\ Libraries目录中
在MT4的[MT4_HOME] \\ MQL4目录中(或您要在MT4主文件夹中的任何位置)创建一个文件夹“ test_script”
将libmydll.def文件复制并粘贴到“ test_script”文件夹中
在“ test_script”文件夹中创建一个新脚本“ mydlltester.mq4”
写入“ mydlltester.mq4”文件的内容如下
#property strict
#import "mydll.dll"
int DLLAdd(int i, int j);
#import
void OnStart()
{
Comment(DLLAdd(2,3));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.