[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);
}

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です