初めてのDLL(2)/関数作成篇
昨日に引き続き、DLL作成のお話です。
念のために書いておきますが、あくまでもDLL作成の雰囲気をつかむのが目的ですので、少し勉強したら高速処理できるDLLが作れる・・・なんてことは絶対ありません^^;
C言語や、VisualC++に相当詳しくならないと難しいです。
(その上、無料版では、本格的な高速化は出来なかったような気がしますし...orz
続きは、本当に興味のある人だけどうぞ..orz
昨日は、
・Release モードを選ぶ
・リビルドを行う
の2点を覚えました。これらは忘れずに実行しましょう..。
今日は、関数の作り方を紹介します。
(1) 秘密の関数 SecretFunc1 を作ります。
↓サンプルの ExpertSample.cpp から不要な部分を削除して SecretFunc1 のみにしたものです。
MQL4 と比べると、MT4_EXPFUNC や __stdcall という余分な文字列が入りますが...そういう規則があるのだと諦めましょう^^;DllMain という関数はDLLが読み込まれたときや終了したときに呼ばれますが、気にしなくてOKです。
SecretFunc1 関数の内容は double 型の引数 a,b に対して 2*a+b を計算して返しているだけです。
(2) .def ファイルを書き換えます。
↓サンプルではDLL内の関数名が列挙されています。
↓これを SecretFunc1 のみにします。
この状態でリビルドすれば DLL が完成します。
(3) MQL4 側は、以下のように書きます。
↓実行すると... 2*5+1 = 11 となります。
関数から複数の計算結果を得る。
上記で紹介した関数の作り方では、return で返される1つの計算結果しか受け取ることができません。ロジックの隠ぺいが目的の場合は、これではちょっと不便なので、配列をデータの授受に使います。
(4) MQL4 側では、静的配列を用意し、配列要素0〜3 に計算に使うデータを代入します。計算結果の受取りには、配列要素4〜5 を使います。
(5) DLL 側は以下のように書いて計算します。
↓関数名 SecretFunc2 を def ファイルにも追加します。
DLL内で使われている C言語は、MQL4 とは異なるのですが、四則演算のような簡単であれば MQL4 の知識だけでもプログラミングできると思いますので、いろいろ試してみてください。
プロジェクトの置き場所について
今日のプロジェクトはここからダウンロードできます。DLLSample と同じフォルダに置いてください。
次回は、簡単なテクニカル指標をDLL内で計算する方法を紹介します。