[MQL4]c++側でクラスや構造体を作って使う
六花です。
MT4のEA記述言語であるMQL4を扱う際、C++で記述されたソースコードを使いたい場合があります。
そのとき、C++を32bitのDLLにして使うのですが、クラスなり構造体なり、オブジェクトとして扱うときのやりかたをネットで検索してもうまく出てこなかったので、備忘録として書き残しておきます。
§ intとポインタは互換
シンプルな方法は、C++側で全て完結させることです。
C++のポインタ型はMQL4とint型で共有できるので、int型でオブジェクトを管理できます。
DLL側
class A
{
};
extern "C" __declspec(dllexport) A* __stdcall DLL_init()
{
auto p = new A();
return p;
}
extern "C" __declspec(dllexport) void __stdcall DLL_deinit(A* p)
{
delete p;
}
extern "C" __declspec(dllexport) void __stdcall DLL_exec(A* p)
{
p->exec();
}
MQL4側
int obj;
int OnInit()
{
obj = DLL_init();
}
void OnDeinit(const int reason)
{
DLL_deinit(obj);
}