DLL内にてCFileDialogを拡張する方法について教えてください。
SetTemplateを使って、CFileDialogの下に拡張の為のダイアログをくっつけて表示するCFileDialogExを作成しています。
メイン側で拡張したCFileDialogExを定義し使用すると上手くいくのですが、DLL側にてCFileDialogExを定義し、DLL側で使用しようとすると、DoModalで失敗し、上手く出来ません。失敗した原因を調べて見るとリソースが見つからないと言われています。
どのようにすればDLL側でも使用できるのでしょうか?
DLL の HINSTANCE がうまく渡ってないとか?
こんなのがありました。
http://support.microsoft.com/default.aspx?scid=kb;ja;150121
これを見ると、DLL のリソースもちゃんと巡回してくれるように見えます。
が、「詳細」に注目してください。こう書いてあります。
> AfxGetResourceHandle 関数の戻り値。通常、アプリケーション リソースを表します。
で、CFileDialog のソースコードを見たら、AfxFindResourceHandle ではなく、AfxGetResourceHandle を使っていました。つまり、CFileDialog は、強制的に exe からリソースを読み込んでいるものと思われます。
回避索としては、そのページに書いてあるように AfxSetResourceHandle を使うか、DoModal をする前に
AFX_MANAGE_STATE(AfxGetStaticModuleState());
って書いておけばいいみたいです。
早速のお返事ありがとうございました。
つまりCFileDialogはEXEからリソースを読み込んでいるためDLL側で定義されているリソースは不正あるいは取得出来ないと言うことですね。
リソースの管理がEXEとDLLで異なり、それを内部でやり取りしているために上手くリソースを取得出来ていない。それを補う為、
AFX_MANAGE_STATE(AfxGetStaticModuleState());
を使用して、DLLのリソースを強制的に読み込めば良いと言う事ですね。
この方法を用いて、明日早速、実際に取得できるか試そうと思います。ありがとうございました。これで解決にさせて頂きますが、今後とも宜しくお願い致します。
すいません、解決を忘れてました。
すいません、解決を忘れてました。
ツイート | ![]() |