初めてのDLL(4)/最終回・配布心得篇

↓FXDDのツイッターからの抜粋です。「MT4のEAがMT5でも使用可能にします。」って本当に可能なのでしょうか?^^;

MT4とMT5の一番大きな違いはポジション管理にあって、MT5ではポジションが合算されてしまうのが一番の問題です..。全てのEAと裁量トレードで、ポジション状態の取り扱いに一定のルール(例えば、Virtual Order Manager)を決めればMT4時代のように処理できるでしょうけど、ルールを統一する事自体が実現困難なのではと思うのです..。
(MT4サーバのバックエンドにMT5サーバが動くパターンなら、可能かもしれませんけど、遅延を考慮すると、、、ちょっといや〜んな感じ。。





さて、本題に入ります。過去3回で本当に最小限の手順は書いたつもりなので、最終回はDLLを配布する際に気をつけるべき点を紹介します。


続きは、本当に興味のある人だけどうぞ...





実行に必要なDLLを最小限にする。

DLLを配布して起こるトラブルとしては、他人のPCでは動かないという問題が一番多いと思います。
これは、配布しているDLL(例えば、CustomMA.dll) が、動作する為に別のDLLを必要としているのが原因です。CustomMA.dllがどんなDLLを必要としているのか調べるには、Dependency Walkerを利用します。
CustomMA.dllを、Dependency Walkerにドロップすると下図のようになります。

↑CustomMA.dllは、MSVCR90.dll と、KERNEL32.dll が実行に必要だとわかります。
KERNEL32.dllは、Windows本体に含まれているので問題無いのですが、MSVCR90.dllは、別途インストールしないといけない場合があります。(ちなみに、VC++2008 Expressをインストールしている人には自動的にインストールされています...)
一般のユーザは、Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)をダウンロードしてインストールすればOKです。


しかし、、わざわざインストールしてもらうのは面倒ですし、サポートの手間も掛かるので、通常は、下記のようにランタイムライブラリに /MT を指定して余分なDLLが不要になるようにします。

↓/MT オプションでビルドすると、MSVCR90.dllを必要としないdll が出来上がります。



DLLを解析されにくくし、試用期限やライセンス機能を付与する。

ロジックをDLL化することで、かなりセキュアにはなるのですが、DLL本体をクラックしようとする輩も大勢居ますので、もう少し強固に守ってやる必要があります。そのために役立つのが、WinLicenseという商用ソフトで、これはMetaTrader4本体のクラック対策にも使われています。
このソフトは、本来はソースコードレベルでマクロを利用してガードするものですが、既に出来上がったDLLに対してガードを掛けることもできます。
↓多様な解析方法からガードしてる雰囲気な画面

↓DLL本体に試用期限を設定する画面

↓ハードウェアIDに何を使うか設定する画面

詳しい使い方は省略しますが、俗に割れにくいと言われるモノにはこういうツールが使われていることが多いです。


↓CustomMA.dllに試用期限30日を付けると、DLL読み込み時にこんなダイアログがでるようになります。

画面内のハードウェアIDに対してライセンスファイルを発行すればダイアログは消えます。
今は口座番号やアカウント名でライセンスするものが多いですが、こういうやり方もあるよっということで参考まで。