MQL4からDLLに2次元配列を渡す

 

Expert Advisorで配列の状態を制御する必要があります。そのために、MQL4から2次元配列を受け取り、その状態をポップアップウィンドウに出力するDLLをC++で作りたいと思います。

私の理解では、MQL4からDLLに2次元配列を渡す必要がありますが、1次元目の次元数が不明でMQL4内の関数で変化する場合、どのように2次元配列を渡せばいいのでしょうか?

 
動的な配列を 作成します。
 

プログラミング初心者なのですが、わかる方教えてください。例えば、MQL4には配列があります。

ダブルマス[][6]

1.C++でDLLに渡すには?

2.C++でポップアップウィンドウに表示するには?

 

動作する冗長性のないDLLをスカルプトする場合、様々な手間がかかりすぎるため、:

-> 1. 一次元配列のみを渡す必要があるように問題をアレンジする(「bag-of-tags」方式)。

-> 2.このDLLの基本的な考え方は、関数のライブラリ、つまりまさに_計算_モジュールなので、ここでグラフィック/ウィンドウの要素を使用することは絶対に避けてください。

-> 3.(文字列を渡すとき、最も頭痛の種になるのは、それがansi文字列である場合、つまり、Unicodeとその亜種である場合です(項目1参照)。1、以前はmqlでchar、つまりバイトに変換されていた。

-> 4.(あなたのDLLが計算にオブジェクトを使用する場合、それらを1つにまとめ、初期化時にそのハンドルを取得し、それをmql-programに渡し、このハンドルでラッパーオブジェクトを参照しながらメソッドを呼び出すのがよいでしょう。

 

ターキーをアンロードし、C++モジュールをロードして削除する、というように、ファイルを通して実装するのが一番簡単な方法だと思うのですが。

 
MQL4には、多次元配列は ありません。一次元のものとして送信する、要はサイズを計算して正しく送信することです。
 

TheXpert:
В MQL4 нет многомерных массивов. Передавайте как одномерный, главное правильно размер высчитать и передать.

I.e. if array[10][6] then its size is one-dimensional 60?

 
Barbarian:
はい。
 
TheXpert:
はい。
つまり、C++では、1次元の配列を2次元に戻すクラスを作成する必要があるのですね。
 
Barbarian:
では、C++では、1次元の配列を2次元に戻すクラスを作る必要があるのですね。

ええ、もちろんです。

先日、そんな授業を書き上げました。本当に多次元の動的配列です。つまり、データ構造を崩すことなく、その場で測定回数を変更することが可能なのです。

また、配列へのポインタで初期化することも可能です。オペレーターに過大な負荷を与えてしまった。348個のオーバーロードを取得しました :-))

オペレーターもほぼ同様です。

a4Arr[1][2][3] += a3Arr[1][0]; // В указанное 4-е измерение массива a4Arr добавляется содержимое 3-го измерения массива a3Arr.
そのために数学的な演算やさまざまな操作をしてきました。インデックスにはリバースがあり、その他にもいろいろと工夫しなければならないことがあります。

========================

配列の多次元 性は、あくまでインターフェースです。配列の配列、配列へのポインタの配列、コンテナクラスの配列、コンテナクラスなどを隠蔽することができる。

この場合、1次元配列を多次元配列として解釈することだけが適している。そうでなければ、MQL4から渡す方法がありません。

 
Barbarian:
つまり、C++では、1次元の配列を2次元に戻すクラスを作る必要があるのでしょうか?
必ずしもそうではありません。インデックスを算出することができます。毎回、配列を変換するのは大変な作業です。
理由: