dll中的導出類序列化問題

很多年前就解決這個問題了,現在記憶力下降厲害,每次遇到都像新問題一樣解決它,在這裏記一下,備忘

爲了使類可序列化的 CArchive 對象使用,類必須從 CObject 派生,並且必須實現的 DECLARE_SERIAL 和 IMPLEMENT_SERIAL 的宏。因爲它們定義重載的函數,需要這些宏運算符 >>,爲該類別明確。該類在擴展 DLL 中定義並使用 AFX_EXT_CLASS 宏,重載的函數中,導出的其中一個案例中運算符 >>,無法不與類一起導出。因此,如果主應用程序實例化的類類型的對象,嘗試序列化該對象,通過使用 CArchive 對象 LNK2001 無法解析的外部錯誤將發生。

將您的擴展 DLL 中的類聲明這種方式:

在 CMyObject 頭 (.h) 文件:
   #define DECLARE_SERIAL_EXTDLL(class_name)   \ 
           _DECLARE_DYNCREATE(class_name)      \ 
           AFX_EXT_API friend CArchive& AFXAPI \ 
           operator>>(CArchive& ar, class_name* &pOb);

   class AFX_EXT_CLASS CMyObject : public CObject
   {
       DECLARE_SERIAL_EXTDLL(CMyObject)
       ...

   };

   In the implementation (.cpp) file for CMyObject:

   ...

   IMPLEMENT_SERIAL(CMyObject, CObject, YOUR_SCHEMA_NUMBER_HERE)

   ...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章