とあるアプリのアドオンを 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); }