MQL4 dllから文字列を戻す

dllからMQL4へ参照渡しで複数のデータを返す方法を確認しましたが
文字列を返す方法を確認してみます

文字列を戻す

 

dllから複数の戻り値を取得する方法はこちらでやりました
 

MQL4では関数から複数の値を戻すために参照渡しを使いましたが dllにある外部関数から複数のreturnを得るにはどうすればいいでしょう...
 
文字列は多少面倒なので別にやってみることにしました

 

戻り値が文字列

 

最初は、戻り値をstringとして dll から文字列を取得する簡単な方法を試してみます

実装定義のワイド文字型の wchar_t を使うと便利です
また wchar_t は ‘L’ プレフィックスをつけます

まとめてみると、

MQL4

Visual Studio 2022でdllを作成します
プロパティ設定が合っていないとこのコードの通りになりません(エラーになる)ので注意です

dllmain.cpp

これでストラテジーテスターで実行すると
Hello World! の文字列が戻ってきているのが分かります

returnで文字列を返すのは比較的簡単に済みます

 

参照渡しの文字列

 

複数の文字列を戻り値としたい場合は参照渡しとなります
但し、文字列配列はdllでは使えないので何個か別々に並べる程度になります
また長文はメモリの制限が無いか確認が必要です

戻す文字列の文字数は wcslen を使います
wcslenの引数はワイド文字列で、文字数はワイド (2 バイト) 文字の単位
それ以外はwcslen と strlen の動作は同じです

ワイド文字列のコピーには、wcscpy_s を使います

dllmain.cpp

MQL4

ストラテジーテスターでは、

Hello World! と 2nd Text の文字列が戻ってきました

 

日本語の戻り値

 

文字列で漢字などを使用する想定であれば
setlocale も一緒に使ってみます
ロケールを使う場合、ヘッダーファイル locale.h をインクルードします

dllmain.cpp

MQL4

ストラテジーテスターでは、日本語の文字列が返ってきています

2014年、MT4のbuild 509から600にアップデートされ、仕様が大幅に変わりました
MetaQuotes はMT4からMT5に移行したかったのでしょうけれど、MT4愛用者が
MT5に移行せずにとどまっているので、無理くりMT4をMT5に近づけていったのでは
と個人的におもいました

そのためでしょうか、MQL4もC言語のようなC++のような中途半端な感じです

関連記事:

  1. MQL4 dll を Visual Studio 2022 で作成
  2. MQL4 dll を作成 (Visual Studio 2017編)
  3. MQL4 dll から複数の値を戻す方法
  4. MQL4 dllから文字列を戻す




シェアする

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

フォローする