CTreeCtrlの派生クラスのエクスポート方法について

[戻る]
supuli 2007/01/05(金) 18:10:11
初質問ですので、不手際あるかと思いますが、あわせてご指南ください。
開発環境は、Windows2000,VisualStudio6.0です。
MFC拡張DLLを作成しています。
別の拡張DLLに、CTreeCtrlの派生クラスをのせた画面を呼び出せるようにしたいので
す。
ソースが手元にないので記憶の限りで記述させていただきます。

画面クラスと、CTreeCtrlの派生クラスをエクスポートし、
(class __declspec(dllexport) 派生クラス名 : public CTreeCtrl)
画面が呼び出せはするのですが、画面を閉じる時に、Access Violationが起きてしまい
ます。
デバッグで追いかけたところ、呼び出し時に、呼び出し元にて確保してあるリソースハ
ンドルがクリアされてしまいました。
const HINSTANCE hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(DLL のインスタンス ハンドル);
CDialog dlg;
dlg.DoModal();//画面呼び出し時に、上のhInstanceがNULLになってしまいます。
AfxSetResourceHandle(hInstance);

CTreeCtrlの派生クラスに、メンバ変数が存在しない場合は、hInstanceはNULLになりま
せんでした。
現在手詰まりで、どこから調べたらよいかも分からない状況です。
助言、宜しくお願いいたします。

dairygoods 2007/01/06(土) 11:47:06
リソースは全てDLLに含まれていますか?

> const HINSTANCE hInstance = AfxGetResourceHandle();
> AfxSetResourceHandle(DLL のインスタンス ハンドル);

拡張DLLは、自分自身をリソース検索列に追加するので、
こういう操作は不要だと思うのですが、
何か理由があってのことでしょうか?

超初心者 2007/01/06(土) 13:37:17
CDialog dlg;
じゃなくて
CTreeCtrlの派生クラスを使用しているCDialogの派生クラスじゃないの?

supuli 2007/01/06(土) 15:42:46
説明不足ですみません。
>拡張DLLは、自分自身をリソース検索列に追加するので、
>こういう操作は不要だと思うのですが、
>何か理由があってのことでしょうか?
知識不足で"リソース検索列"の意味が分からないので教えてください。
初期画面として、VCでExeを用意しており、そこから、各拡張DLLを呼び出しています。
呼び出された拡張DLLから、さらに別の拡張DLLを呼び出したりもしています。
Exeなり、拡張DLLなり、切り替えるときには、
上記のようにリソースハンドルを切り替えるもの
というお決まりのものだと思っていました。

>CDialog dlg;
>じゃなくて
>CTreeCtrlの派生クラスを使用しているCDialogの派生クラスじゃないの?
その通りです。言葉足らずですみません。
CDialogの派生クラスに、CTreeCtrlの派生クラスをメンバ変数にして用意しています。

CObjectの派生クラスなんかはエラーは発生していないです。
以上、宜しくお願いいたします。

古いスレッドには追加発言できません。