很多年前就解決這個問題了,現在記憶力下降厲害,每次遇到都像新問題一樣解決它,在這裏記一下,備忘
爲了使類可序列化的 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) ...