如何创建C++ DLL(使用DEV -C++)并在MT4脚本中使用(一步一步)

问题描述 投票:0回答:1

我正在尝试使用 DEV-C++ IDE 工具创建自己的 DLL 并尝试在 MT4 脚本中使用它。 我尝试研究任何 MT4 安装中可用的示例文件 [MT4_HOME]\MQL4\Scripts\Examples\DLL\DLLSample.cpp,并尝试对其他脚本遵循相同的逻辑,但没有成功。为了清楚起见,我在下面详细描述了我遵循的步骤。 我想了解为什么按照所描述的步骤我自己的 dll 不起作用。


系统配置

  1. Windows 10 笔记本电脑;
  2. Dev-cpp 安装完毕
  3. MT4已安装

目标

  1. 使用“dev–c++”IDE工具编写自己的dll;
  2. 编译dll;
  3. 在 mt4 中使用 dll 到简单的脚本中。

步骤

  1. 首先,我在桌面上创建一个名为 mydll 的文件夹;
  2. 我启动dev-cpp IDE工具;
  3. 文件 -> 新建 -> 项目;
  4. 我选择项目类型 -> DLL
  5. 我写项目名称:mydll
  6. 我按确定按钮
  7. 然后我选择保存项目的文件夹(步骤 a 中在桌面中创建的 mydll 文件夹)并按“保存”
  8. 此时 Dev –C++ 显示了两个文件模板(dllmain.cpp、dll.h),但我忽略它们并关闭它们,而不将它们保存到项目中。关闭它们后,我还将它们从 IDE 工具中删除(用鼠标单击并单击删除每个文件的文件)
  9. 现在我点击 devc++ 项目 -> 新文件
  10. 现在我将我自己的 DLL 的源代码粘贴到此文件中。 (以下代码) 注意:对于熟悉 Metatrader 4 的人,请注意此代码是标准 MT4 安装文件 [MT4_HOME]\MQL4\Scripts\Examples\DLL\DLLSample.cpp 的片段

#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. 观察结果: A。编译过程成功完成,没有任何错误和警告 b.一些文件出现在 DEV-C++ 项目中(mydll.dll、libmydll.def、libmydll.a、mydll.o、Makefile.win、mydll.layout)。
  4. 现在,我将 mydll.dll 复制并粘贴到 MT4 的 [MT4_HOME]\MQL4\Libraries 目录中
  5. 现在,我创建一个空文件夹 [MT4_HOME]\MQL4\Scripts\Examples\mydll
  6. 我将文件 mydll.cpp 和 libmydll.def 复制并粘贴到 [MT4_HOME]\MQL4\Scripts\Examples\mydll 文件夹中
  7. 最后,我在 [MT4_HOME]\MQL4\Scripts\Examples\mydll 文件夹中创建一个名为 mydllTester.mq4 的新文件。下面是源码

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

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

  1. 我使用 MT4 代码编辑器打开文件 mydllTester.mq4 并编译该文件。
  2. 最终测试 作为最后一步,我进行测试以检查这是否有效。我打开 Metatrader4,打开一个新图表,然后单击我的脚本。我的期望是数字 10 出现在图表的左上角,但不起作用。你能帮助我了解我犯错误的步骤是什么吗? 非常感谢,最诚挚的问候
c++ dll mt4
1个回答
4
投票

终于我找到了问题的解决方案,现在我可以编写一个简单的 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的[MT4_HOME]\MQL4\Libraries目录下

  3. 在 MT4 的 [MT4_HOME]\MQL4 目录中创建一个文件夹“test_script”(或 MT4 主文件夹中您想要的任何位置)

  4. 将 libmydll.def 文件复制并粘贴到“test_script”文件夹中

  5. 在“test_script”文件夹中创建一个新脚本“mydlltester.mq4”

  6. 将“mydlltester.mq4”文件的内容写入如下


#property strict

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

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

  1. 用MT4编译器打开“mydlltester.mq4”文件并编译
  2. 最终测试:如果您现在在 mt4 中打开图表并运行脚本 mydlltester,您将看到图表左上角出现总和 5。干杯!!
© www.soinside.com 2019 - 2024. All rights reserved.