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