2012-01-24 21 views
2

通常の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を呼び出すと、デシリアライズが機能しなくなります。

enter image description here

私は、次の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です。

答えて

関連する問題