我正在尝试使用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);
}
答案 0 :(得分:0)
最后我找到了我的问题的解决方案,现在我能够编写一个简单的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(注意编译使用&#34; TDM-GCC 32位发布&#34;编译器,因为MT4是32位应用程序,它只能理解32位编译文件)。编译器将生成文件mydll.dll,libmydll.def
将文件mydll.dll复制到MT4的[MT4_HOME] \ MQL4 \ Libraries目录
创建一个文件夹&#34; test_script&#34;进入MT4的[MT4_HOME] \ MQL4目录(或MT4主文件夹中的任何位置)
复制并粘贴&#34; test_script&#34;文件夹libmydll.def文件
创建一个新脚本&#34; mydlltester.mq4&#34;在&#34; test_script&#34;内文件夹
写下&#34; mydlltester.mq4&#34;的内容文件如下
#property strict
#import "mydll.dll"
int DLLAdd(int i, int j);
#import
void OnStart()
{
Comment(DLLAdd(2,3));
}