3. 序列化DECLARE_SERIAL和IMPLEMENT_SERIAL宏用于支持序列化,覆盖Serialize函数,序列化类必须同时支持动态创建和运行时类信息。例如,定义支持序列化的CPerson类,需要覆盖Serialize函数。在派生CObject时,需使用DECLARE_/DECLARE_DYNAMIC宏,其中DECLARE_SERIAL用于序列化,但允许动态创建。CRuntimeClass结构中...
序列化是指将对象写入永久性存储媒体(如磁盘文件)或从其中读取对象的进程。 MFC 对 CObject 类中的序列化提供内置支持。因此,所有从 CObject 派生的类都可利用 CObject 的序列化协议。序列化的基本思想是对象应能将其当前状态(通常由该对象的成员变量指示)写入永久性存储中。以后,通过从存储中读取对象状态或反...
} 在序列化宏IMPLEMENT_SERIAL中添加了一个>>运算符的重载,但没有<<运算符的重载。但是在CArchive类中有重载<<的输出CObject的友元函数,通过它完成了类的串行化。 _AFX_INLINE CArchive& AFXAPI operator<<(CArchive& ar,constCObject* pOb) { ar.WriteObject(pOb);returnar; } 该函数通过CArchive::WriteO...
還原序列化物件時,您已經為其配置記憶體。 警告 如果您使用 函式載入物件Serialize,您也必須使用Serialize函式來儲存物件。 請勿使用 運算子儲存,CArchive<<然後使用 函式載入Serialize,或使用 函式儲存Serialize,然後使用 運算子載入CArchive >>。 classCMyObject:publicCObject ...
UINT m_wSchema架构编号(-1 表示不可序列化的类)。 有关架构编号的说明,请参阅IMPLEMENT_SERIAL宏。 CObject* (PASCAL* m_pfnCreateObject)()指向创建类对象的默认构造函数的函数指针(仅当类支持动态创建时有效;否则将返回NULL)。 CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )()如果应用程序动态链接到 AFXD...
“序列化”就是把对象内容存入一个文件或从一个文件中读取对象内容的过程。从CObject派生的类要具有序列化的功能,需要:● 定义该类时,在类说明中使用DECLARE_SERIAL(CLASSNMAE)宏;● 定义一个不带参数的构造函数(默认构造函数);● 在类的实现文件中使用IMPLEMENT_SERIAL(CLASSNAME,BASECLASS)宏;● 覆盖...
您不能使用 CFile 操作修改文件的状态,直到您关闭了存档。 任何此类操作将损坏存档的完整性。 在序列化时在+任何+时间可以访问文件指针的位置。获取存档文件对象从 GetFile 成员函数然后使用 CFile::GetPosition 功能。 您应在获取文件指针的位置之前调用 CArchive::Flush。
8.类中实现了Serialize(),并且在其中调用基类的序列化函数; 9.使用IMPLEMENT_SERIAL宏指明类名及版本号 提供的功能:class_name *pObj=RUNTIME_CLASS(class_name)->CreateObject() //实现方式: CRuntimeClass::CreateObject()--àCRuntimeClass::m_pfnCreateObject--àCtargetClass::CreateObject()(在实现宏中实现...
fileLoad.Close(); MFC序列化注意事项: ·要想使某一类型能被序列化,在它类型声明文件(头文件,Book.h)和类型定义文件(Book.cpp)中要分别使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏。 ·能被序列化的只能指针型,不能是值型(pBooksStore数组中包含的就是两个CBook类型的指针)。 121.15.116.* � ...