標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

VC++で書いたアドオンDLLの中で独自ダイアログが表示できなかった件

とあるアプリのアドオンを VC++ で書いていたんだけれども、自作のダイアログを出そうとしてもなぜか DoModal が素通りしてしまう。

しかも、Visual Studio 自体もなぜか不安定で、クラスウィザードのクラッシュも多発して、原因の切り分けができない!!!

1日半ほど苦闘した結果、ようやく以下の情報に巡り合った

どうやら、EXE側からDllMainの第一引数で与えられているハンドルを DLL側で適切に設定しなくては、DLL側でリソースを使えないらしい (クラッシュの原因は別件なので、ここでは省く)

昨今、ウェブの情報も永遠ではないので、ミラーというかバックアップとして、こちらのソースも晒しておこう。

// DLL のモジュールハンドル
extern "C" HINSTANCE _hdllInstance = NULL;
HINSTANCE GetInstance()
{
    return _hdllInstance;
}

BOOL APIENTRY DllMain(
    HINSTANCE hInstance, 
    DWORD dwReason, 
    LPVOID pReserved)
{
    _hdllInstance = hInstance;
    ; // 中略
}

void example()
{
    const HINSTANCE hInstance = AfxGetResourceHandle();
    AfxSetResourceHandle(GetInstance());

    CSelectDwg dlg1;
    dlg1.DoModal();

    AfxSetResourceHandle(hInstance);
}