MT4でも MQL4用の dll を使って様々な機能をライブラリ化したりすることが可能です
ただ メタエディターではできないので、Visual Studio 2022 を使ってdllを作成してみます
MQL4 dll
Visual Studio 2022, 17.6.5 ですがバージョンやインストール設定で画面が異なる場合もあります
また、以前に Visual Studio 2017 を使用してdllを作成したものはこちらにあります
新規プロジェクト
スタートページから、新しいプロジェクトを作成します。
検索窓に dll と入力して、「ダイナミックリンクライブラリ(DLL)」 を選択して
「次へ」をクリック
メニューの「ファイル」「新規作成」「プロジェクト」からも入れます
新しいプロジェクトの構成:
プロジェクト名:例として Test_dll
場所:適宜選んだロケーション
「ソリューションとプロジェクト…」はチェックを入れておきます
これで「作成」をクリック
プロジェクトが作成されました
コードの記述
MQL4とDLLを以下のようにシンプルに作ります
MQL4: xxx.mq4
aとbの引数を入れ外部関数 Plus をコール
1 |
int Plus(int a, int b); |
DLL: Test_dll.dll
aとbを加算した合計を返す
1 2 3 |
int Plus(int a, int b){ return(a + b); } |
dllmain.cppの最後尾に以下のようにして追加します
1 2 3 |
__declspec(dllexport) int Plus(int a, int b) { return(a + b); } |
__declspec(dllexport) を使うと、データ、関数、クラス、クラスのメンバー関数を DLL からエクスポートできます
また、オブジェクト ファイルにエクスポート ディレクティブが追加されるので、.def ファイルを使用する必要がなくなります
dllmain.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// dllmain.cpp : DLL アプリケーションのエントリ ポイントを定義します。 #include "pch.h" BOOL APIENTRY DllMain( HMODULE 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; } __declspec(dllexport) int Plus(int a, int b) { return(a + b); } |
プロパティ設定
メニューの「プロジェクト」「プロパティ」を選び
プロパティページを以下のように設定
- 構成:すべての構成
- プラットフォーム:すべてのプラットフォーム
ソリューションのビルド
「Release」「x86」を設定
「ビルド」「ソリューションのビルド」からビルドする
ビルドが終了
正常終了していれば、にReleaseフォルダ以下に Test_dll.dll が生成されています
dll の確認
MT4のデータフォルダを開き
..¥MQL4¥Libraries¥
以下にTest_dll.dll に配置します
mq4ファイルを例として以下のような簡単なコード記述してテストしてみます
Test_dll.mq4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● // Test_dll // v1.0 // - first release //●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● #property strict #import "Test_dll.dll" int Plus(int a, int b); #import int nowbar; int OnInit() { nowbar = Bars; return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } //●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● // OnTick() //●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● void OnTick() { // only 1 task on 1 bar if(nowbar == Bars){ return; } else{ nowbar = Bars; } Print("1+2 =", Plus(1,2)); Print("3+5 =", Plus(3,5)); } |
MT4でテストしてみると
1+2=3
3+5=8
と結果が計算されていて、dll が機能しているのがわかります
Ref:
__declspec(dllexport) を使った DLL からのエクスポート
Visual Studio 2022 ダウンロード