コラム

簡単だと思っていたら結構はまったDLL

今回、ご縁があってMetaTrader4の外部DLLを作成するお仕事をいただきました。

普段ふれることが少ないツールのDLLを作成するなかで確認できたことを書いておきます。

MetaTrader4とは?

FX(外貨証拠金取引)において自動売買を手伝ってくれるツールです。通称はMT4のようですね。その中で自動売買のサインやタイミングを知らせるEA(Expert Advisor)をオリジナルで作ることができます。

MT4にはMQLと呼ばれるプログラム言語が搭載されていますので、MT4単独でオリジナルEAを作成することができます。MQLはC++ライクな言語らしく、言語表現もC++に似ています。また、C/C++で作成したDLLをインポートする機能も備わっています。
DLLインポートは、処理速度を要求される課題(もしくはMQL単独では解決し難い課題)において、C++で作成したDLLをリンクして処理するようです。

はまったこと

MQLのリファレンスを読みますと作成したDLLの配置場所は[…\MQL\Experts/Libraries」になっています。しかし、こちらに作成したDLLを配置してもDLLに含まれる関数をCALLした時点で

「Unhandled Exception」が発生したり、「Cannnot Load …」や「Cannot Call …」などで怒られちゃったりします。どうしてでしょう?

いろいろ調べる内に解決策を見つけました。もう7年も前の記事です。
»参考にしたサイト

内容をかいつまむと「MQLの実行環境にDLLを配置しないと動かないよ」と言うことでした。

早速、該当DLLをMT4インストールフォルダに配置すると…動きました。

注意点

今回はC#で作成したDLLをC++/CLIのDLLでラップしました。つまり、DLLが二つある状態です。

MQL -> DLL(C++/CLI) -> DLL(C#)

なので、DLLは両方ともMT4のインストールフォルダに配置してくださいね。

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!