DLL中に記述したCTypedPtrListの利用 – プログラミング – Home

DLL中に記述したCTypedPtrL...
 
通知
すべてクリア

[解決済] DLL中に記述したCTypedPtrListの利用


かど
 かど
(@かど)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

初めて質問します。

DLLでCTypedPtrListを定義したクラスをエクスポートして、ExeでSelializeによるフ
ァイルの読み書きを行いたいのですが、読み込みが行えません。

テストでちいさなプログラムを作成して行ってみたんですが、同様のエラーで読み込みが
行えませんでした。
ちょっとそのプログラムをかいつまんで書いてみます。
DLL側にCObjectから派生したクラスA,Bを作成します。
Aは下みたいな感じです。
(DLL_EXPORTは__declspec(dllexport)と__declspec(dllimport)の切り替え)
class DLL_EXPORT A : public CObject
{
public:
int x,y;
CTypedPtrList<COblist,CObject*> m_list;
DECLARE_SERIAL( A )
virtual void Serialize( CArchive& );
A(){}
~A(){}
}
クラスBは、CTypedPtrListのメンバを持っていないだけでAと同じクラス構成のものを
作成しています。

次に、クラスAのソース側を以下のように記述します。

IMPLEMENT_SERIAL( A,CObject,1)
void A::Serialize( CArchive& ar )
{
CObject::Serialize( ar );
if( ar.IsStoring() ){
ar << x << y;
}
else{
ar >> x >> y;
}
m_list.Serialize(ar)
}

でExe側でDLLを呼んで、m_listにtestBをAddtailして追加します。

ファイルの書き込みはできる(正しいかは?)んですけど、
そのファイルを読み込むとm_list.Serialize(ar)で
Cannot load B from archive. Class not defined.という警告のあと落ちてしまいます。

実行環境は、VCの6.0でWIN2000です。
MFCの共有DLLを使用を選択しています。

よろしくお願い致します。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

VC++のDLLタイプを「拡張DLL」にしないと、
EXEとDLLの間でMFC(とその派生クラス)のポインタを
やり取りすることはできません。

MSDNの「DLL に関するトピック」に各DLLの違いが詳しく載っています。


返信引用
かど
 かど
(@かど)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

ご指摘の通り、拡張DLLをでDLLを作成したところ、うまくいきました。

>MSDNの「DLL に関するトピック」に各DLLの違いが詳しく載っています。
よく読んで勉強します。

ありがとうございました。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

マルチポストした場合には、マルチポスト先にも解決の回答を書きましょうよ
レスがついてますよ。

ねぇ、kadotaさん?


返信引用
かど
 かど
(@かど)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

そうですね。ご忠告ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました