初めての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内で計算する方法を紹介します。