MQL4 dll から複数の値を戻す方法

MQL4では関数から複数の値を戻すために参照渡しを使いましたが
dllにある外部関数から複数のreturnを得るにはどうすればいいでしょうか

int型の配列、int型のデータ、bool型のフラグについて確認してみます

dllの複数戻り値

 
複数の戻り値を得る方法をこちらで試しましたが
 

MQL4の関数でreturnは基本的に1つだけですが、複数の戻り値を返したい場合があります そういう場合は、参照渡しというやり方で、構造体...

 
このままではdllには使えません
dllから複数の戻り値を取得する方法を検討してみます
 

 

配列の参照渡し

 
複数の値を戻すために参照渡しをつかっていましたが、その流れで
外部関数のFShift06()をdllに作成してmql4から呼び出します

引数は;

  • int &paramS[]:int型 配列の参照渡し
  • int data;配列の要素数を表すintデータ
  • bool dllflg:フラグとしてのbool データ

とし、関数の戻り値のboolと、配列に複数のデータを入れて返ってくるようにします

この引数なら構造体にすればMQL4内であれば可能ですが、dll には
ダメとは言っていないのですがあいまいな感じです

The following can’t be used for parameters in imported functions:

Classes, string arrays or complex objects that contain strings and/or dynamic arrays of any types cannot be passed as a parameter to functions imported from DLL.

Reference: Importing Function (#import)

バラバラの引数として
MQL4とdll を以下のように作ってみます



呼び出すMQL4側はこのようにまとめます

TestSeveralReturns.mq4


 

配列に値を入れてアドレスを戻す

 
Visual Studio 2022を使ってdllを作成します

プロパティ設定でCコードとしてコンパイルする設定なので
それに合わせて追加変更が必要です

足りないヘッダー
“stdbool.h” などを入れます
また、参照渡しの引数はポインターに変更など

dllmain.cpp


ストラテジーテスターで実行してみると、

各配列要素に、dd(3)+i のデータが入れられて戻ってきているのがわかります
想定通りに動いています

関連記事:




シェアする

  • このエントリーをはてなブックマークに追加

フォローする