MT4でも MQL4用の dll を使って様々な機能をライブラリ化したりすることが可能です
ただ メタエディターではできないので、Visual Studio 2022 を使ってdllを作成してみます
(モジュール定義ファイル(.def)を作成しなくてもできます)
MQL4 dll
Visual Studio 2022, 17.6.5 ですがバージョンやインストール設定で画面が異なる場合もあります
インストールはこちらから、無料はCommunityになります
また、以前に 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から文字列を戻す