如果我從常規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「一位不願透露姓名的文件包含一個意外的對象。」
另外在Visual Studio 2008的輸出提供了當我運行SerializeTest的調試版本的以下信息:
「警告:無法從存檔加載CSerializableClass。類未定義。 CArchive異常:badClass。在SerializeTestD.exe 0x7c812afb 第一次機會異常:微軟C++異常:CArchiveException內存位置0x0012edf8」
下面的測試代碼在CMFCDLL :: DOIT運行
無效CMFCDLL :: DOIT(無效)
{
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是一個正規的DLL訪問MFC擴展DLL中的序列化。