通常のDLLからMFC DLLをロードすると、逆シリアル化が機能しなくなります。通常のDLLからMFC DLLをロードすると、逆シリアル化が機能しなくなる
私は以前この質問をしていましたが、当時私はそれが複雑であると思っていたので、問題を解決する答えは得られませんでした。 を参照してください。C# .NET User Control inside native app. Resource chain problems
ここで同じ問題を示すテストアプリケーションを作成しました。 圧縮されたコードファイルはhttps://skydrive.live.com/?#cid=0977B1167FE01BB3&id=977B1167FE01BB3%21105&sc=documentsです。
通常のDLLからMFC拡張DLLを読み込むと、アプリケーションから直接MFC拡張DLLを呼び出すと、デシリアライズが機能しなくなります。
私は、次のCArchiveException取得デシリアライズしようとする「無名のファイルが予期しないオブジェクトが含まれています。」
「警告:アーカイブからCSerializableClassをロードできません
はまたのVisual Studio 2008での出力は、私がSerializeTestのデバッグバージョンを実行して、以下の情報を提供します。クラスが定義されていません。 CArchive例外:badClass。 SerializeTestD.exeで0x7c812afbで 初回例外:マイクロソフトC++の例外:メモリ位置0x0012edf8でCArchiveException」
次のテストコードがCMFCDLL ::ドイトで実行されて無効CMFCDLL ::ドイト(無効)
{
BYTE * pBuf = (BYTE *)new char [1024];
{
CSerializableClass *pSerializableClass = new CSerializableClass;
CMemFile mf;
mf.Attach(pBuf, 1024);
CArchive ar(&mf, CArchive::store);
ar << pSerializableClass;
ar.Close();
mf.Detach();
delete pSerializableClass;
}
{
CSerializableClass *pSerializableClass = NULL;
CMemFile mf;
mf.Attach(pBuf, 1024);
CArchive ar(&mf, CArchive::load);
try
{
ar >> pSerializableClass;
ar.Close();
mf.Detach();
ASSERT(pSerializableClass && pSerializableClass->GetText() == _T("This is a serialize test"));
delete pSerializableClass;
}
catch(CArchiveException *p)
{
char str[500];
p->GetErrorMessage(str,500);
AfxMessageBox(str);
p->Delete();
ar.Abort();
mf.Detach();
}
}
delete pBuf;
}
失敗コードが「AR >> pSerializableClassあります" この問題が発生する理由は何ですか?
通常のDLLを使用する必要があるのはなぜですか?
.NETラッパーを作成しています。混合モードDLLは、MFC拡張DLLでシリアル化にアクセスする通常のDLLです。