DLL内にてCFileDialogの拡張方法について

解決


kanagawa  2005-11-25 07:56:59  No: 59782

DLL内にてCFileDialogを拡張する方法について教えてください。

SetTemplateを使って、CFileDialogの下に拡張の為のダイアログをくっつけて表示するCFileDialogExを作成しています。

メイン側で拡張したCFileDialogExを定義し使用すると上手くいくのですが、DLL側にてCFileDialogExを定義し、DLL側で使用しようとすると、DoModalで失敗し、上手く出来ません。失敗した原因を調べて見るとリソースが見つからないと言われています。

どのようにすればDLL側でも使用できるのでしょうか?


シャノン  2005-11-25 08:12:41  No: 59783

DLL の HINSTANCE がうまく渡ってないとか?


シャノン  2005-11-25 08:20:15  No: 59784

こんなのがありました。

http://support.microsoft.com/default.aspx?scid=kb;ja;150121

これを見ると、DLL のリソースもちゃんと巡回してくれるように見えます。
が、「詳細」に注目してください。こう書いてあります。

> AfxGetResourceHandle 関数の戻り値。通常、アプリケーション リソースを表します。 

で、CFileDialog のソースコードを見たら、AfxFindResourceHandle ではなく、AfxGetResourceHandle を使っていました。つまり、CFileDialog は、強制的に exe からリソースを読み込んでいるものと思われます。

回避索としては、そのページに書いてあるように AfxSetResourceHandle を使うか、DoModal をする前に

AFX_MANAGE_STATE(AfxGetStaticModuleState());

って書いておけばいいみたいです。


kanagawa  2005-11-25 10:36:26  No: 59785

早速のお返事ありがとうございました。

つまりCFileDialogはEXEからリソースを読み込んでいるためDLL側で定義されているリソースは不正あるいは取得出来ないと言うことですね。

リソースの管理がEXEとDLLで異なり、それを内部でやり取りしているために上手くリソースを取得出来ていない。それを補う為、
AFX_MANAGE_STATE(AfxGetStaticModuleState());
を使用して、DLLのリソースを強制的に読み込めば良いと言う事ですね。

この方法を用いて、明日早速、実際に取得できるか試そうと思います。ありがとうございました。これで解決にさせて頂きますが、今後とも宜しくお願い致します。


kanagawa  2005-11-28 08:05:34  No: 59786

すいません、解決を忘れてました。


kanagawa  2005-11-28 11:39:30  No: 59787

すいません、解決を忘れてました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加