MQLでC++のDLLを利用する

DLLファイルの作成

ライブラリ名 DLLTest01
公開関数名 GetSub, GetAdd, GetAvg

  1. プロジェクトを作成
    プロジェクトの新規作成で「Windows デスクトップ 」→「 ダイナミック リンク ライブラリ(DLL)」
    名前の入力:DLLTest01
    場所の入力 → OK
  2. モジュール定義ファイルを追加
    ソリューション エクスプローラーのプロジェクトで「追加」→「新しいい項目」→「Visual C++」→「コード」→「モジュール定義ファイル(.def)」
    名前の入力 : DLLTest01 →「追加」をクリック
    作成したDLLTest01.defファイルを変更する

    LIBRARY DLLTest01
    EXPORTS
    	GetSub
    	GetAdd
    	GetAvg
    
      LIBRARYにライブラリ名、EXPORTSに公開関数名を記入する
    
     
    
  3. DLLTest01.cppファイルに以下の関数を追加する
    double __stdcall GetSub(double A, double B)
    {
    	return A - B;
    }
    
    double __stdcall GetAdd(double A, double B)
    {
    	return A + B;
    }
    
    double __stdcall GetAvg(double A, double B)
    {
    	return (A + B) / 2;
    }
     
    
  4. Releaseバージョンでビルドする

テスト コンソールアプリケーション

  1. Windows コンソール アプリケーションを作成する
  2. 作成したDLLTest01.dllDLLTest01.libファイルをプロジェクトフォルダにコピーする(.vcprojが作成されたフォルダ)
  3. プロジェクトのプロパティページ →「リンカー」→「入力」→「追加の依存ファイル」→「編集」→DLLTest01.lib を入力
  4. アプリケーションの.cppファイルの#includeの行の後ろに以下を入力する
    #include "pch.h"
    #include <iostream>
    
    double __stdcall GetSub(double A, double B);
    double __stdcall GetAdd(double A, double B);
    double __stdcall GetAvg(double A, double B);
     
    
  5. アプリケーションの.cppファイルに以下を入力
    int main()
    {
    	printf("これは減算です %.0lf\n", GetSub(10, 20));
    	printf("これは加算です %.0lf\n", GetAdd(10, 20));
    	printf("これは平均です %.0lf\n", GetAvg(10, 20));
    }
     
    
  6. F5 実行でテストする

MQLでの使用例

  1. 「ファイル」→「データフォルダを開く」
  2. 開いたエクスプローラの「MQL4\Libraries」内いに作成したDLLTest01.dllをコピーする
  3. 新規エキスパートアドバイザーを作成する
  4. #propertyの後ろに以下のコードを入力する
    #property copyright "Copyright 2018, MetaQuotes Software Corp."
    #property link      "https://www.mql5.com"
    #property version   "1.00"
    #property strict
    
    #import "DLLTest01.dll"
         double GetAdd(double, double);
         double GetSub(double, double);
         double GetAvg(double, double);
    #import
     
    
  5. OnInit()に次のコードを入力する
    int OnInit()
      {
    //---
       printf("これは加算です %.0lf", GetAdd(10, 2));
       printf("これは減算です %.0lf", GetSub(10, 2));
       printf("これは平均です %.0lf", GetAvg(10, 2));
    //---
       return(INIT_SUCCEEDED);
      }
     
    
  6. F5 実行する

 

 

カテゴリーMQL

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください