MT4 〜 C言語で作成したDLLをMQL4で使用する
色々なブログなどで紹介されているが、C言語で作成したプログラムをDLLとしてimportしてMQL4から呼び出す作業を自らしたのは初めてなのでメモ。
【大きな流れ】
1.MQL4から呼び出したいC言語のプログラムを作成する。
2.DLLを作成する。
3.DLLを呼び出すMQL4のプログラムを作成する。
【詳細】
1.MQL4から呼び出したいC言語のプログラムを作成する。
ポイントを纏める。
・「__declspec(dllexport)」を関数宣言の先頭に記述する。
・「extern "C"」を付ける。参考にしたページに「関数名は独自のシンボルに変換される。しかし、それではMQL4から呼び出すときの名前がわからなくなるので、「extern "C"」を付けて、関数名が変更されないようにしている。」とある。
ConvCharSet.cという名前で下記ソースを作成。
#include<stdio.h> #define MT4_EXPFUNC __declspec(dllexport) int main(){ printf("Hello"); } extern "C" MT4_EXPFUNC double __stdcall movingAverages(double a, double b, double c, double d) { return((a+b+c+d)/4); }
2.DLLを作成する。
libConvCharSet.dllを作成する。
作成したDLLは、"
C:\dev\c\convCharSet\src>g++ -shared -o libConvCharSet.dll ConvCharSet.c -Wl,-k,--output-def,DllConvCharSet.def,--out-implib,libConvCharSet.a
3.DLLを呼び出すMQL4のプログラムを作成する。
//DLLをインポートする。 #import "libConvCharSet.dll" //DLLで作成した関数を定義する。 double movingAverages(double,double,double,double); //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init(){ //関数の実行 double testNum = movingAverages(1,2,3,4); Print("**********Execute Result********:",testNum);
作成にあたり、「MetaTrader 練習帳」を参考に致しました。
3年前に既に試みられている。3年前はMT4でプログラミングなんて、存在すら知らなかった。