MT4でも MQL4用の dll を使って様々な機能をライブラリ化したりすることが可能です
ただ メタエディターではできないので、Visual Studio 2022 を使ってdllを作成してみます
(モジュール定義ファイル(.def)を作成しなくてもできます)
MQL4 dll
Visual Studio 2022, 17.6.5 ですがバージョンやインストール設定で画面が異なる場合もあります
インストールはこちらから、無料はCommunityになります
https://visualstudio.microsoft.com/ja/downloads/#
また、以前に Visual Studio 2017 を使用してdllを作成したものはこちらにあります
新規プロジェクト
スタートページから、新しいプロジェクトを作成します。
検索窓に dll と入力して、「ダイナミックリンクライブラリ(DLL)」 を選択して
「次へ」をクリック
メニューの「ファイル」「新規作成」「プロジェクト」からも入れます
新しいプロジェクトの構成:
プロジェクト名:例として Test_dll
場所:適宜選んだロケーション
「ソリューションとプロジェクト…」はチェックを入れておきます
これで「作成」をクリック
プロジェクトが作成されました
コードの記述
MQL4とDLLを以下のようにシンプルに作ります
MQL4: TestPlusDll.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 からのエクスポート
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); } |
プロパティ設定
メニューの「プロジェクト」「プロパティ」を選び
プロパティページを以下のように設定
- 呼び出し規約
- __stdcall(/Gz)
- コンパイル言語の選択
- Cコードとしてコンパイル(/TC)
- ランタイムライブラリ
- マルチスレッド(/MT)
構成とプラットフォームを以下のように設定
- 構成:すべての構成
- プラットフォーム:すべてのプラットフォーム
ソリューションのビルド
「Release」「x86」を設定
「ビルド」「ソリューションのビルド」からビルドする
ビルドが終了
正常終了していれば、にReleaseフォルダ以下に Test_dll.dll が生成されています
dll の確認
MT4のデータフォルダを開き
..¥MQL4¥Libraries¥
以下にTest_dll.dll に配置します
mq4ファイルを例として以下のような簡単なコード記述してテストしてみます
TestPlusDll.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 |
//●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● // TestPlusDll // 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 ダウンロード
関連記事:
- MQL4 dll を Visual Studio 2022 で作成
- MQL4 dll を作成 (Visual Studio 2017編)
- MQL4 dll から複数の値を戻す方法
- MQL4 dllから文字列を戻す