3. 序列化DECLARE_SERIAL和IMPLEMENT_SERIAL宏用于支持序列化,覆盖Serialize函数,序列化类必须同时支持动态创建和运行时类信息。例如,定义支持序列化的CPerson类,需要覆盖Serialize函数。在派生CObject时,需使用DECLARE_/DECLARE_DYNAMIC宏,其中DECLARE_SERIAL用于序列化,但允许动态创建。CRuntimeClass结构中...
序列化是指将对象写入永久性存储媒体(如磁盘文件)或从其中读取对象的进程。 MFC 对 CObject 类中的序列化提供内置支持。因此,所有从 CObject 派生的类都可利用 CObject 的序列化协议。序列化的基本思想是对象应能将其当前状态(通常由该对象的成员变量指示)写入永久性存储中。以后,通过从存储中读取对象状态或反...
UINT m_wSchema架构编号(-1 表示不可序列化的类)。 有关架构编号的说明,请参阅IMPLEMENT_SERIAL宏。 CObject* (PASCAL* m_pfnCreateObject)()指向创建类对象的默认构造函数的函数指针(仅当类支持动态创建时有效;否则将返回NULL)。 CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )()如果应用程序动态链接到 AFXD...
(1)、运行类信息;(2)、序列化;(3)、对象诊断输出;(4)、同集合类相兼容; (1)、运行时类信息: 注意:要想使用cruntimeclass结构得到运行时类信息,你必须在你的类中包括declare_dynamic/implement_dynamic、 declare_dyncreate/implement_dyncreate或declare_serial/implement_serial。但你的类必须是从cobject派生的...
您不能使用 CFile 操作修改文件的状态,直到您关闭了存档。 任何此类操作将损坏存档的完整性。 在序列化时在+任何+时间可以访问文件指针的位置。获取存档文件对象从 GetFile 成员函数然后使用 CFile::GetPosition 功能。 您应在获取文件指针的位置之前调用 CArchive::Flush。
CArchive 对象提供了一个类型安全缓冲机制,用于将可序列化对象写入 CFile 对象或从中读取可序列化对象。通常,CFile 对象表示磁盘文件;但是,它也可以是表示“剪贴板”的内存文件(CSharedFile 对象)。名词解释 局限性 给定的 CArchive 对象要么存储数据(即写入数据或将数据序列化),要么加载数据(即读取数据或将...
在反序列化期间,正在读取的对象的版本。备注仅当加载 CArchive 对象(CArchive::IsLoading 返回非零)时,调用此函数才有效。 它应该是 Serialize 函数中的第一个调用,并且只调用一次。 返回值 (UINT)-1 指示版本号未知。CObject 派生类可以将 VERSIONABLE_SCHEMA 与架构版本本身(在 IMPLEMENT_SERIAL 宏中)结合使用...
UINT m_wSchema架构编号(-1 表示不可序列化的类)。 有关架构编号的说明,请参阅IMPLEMENT_SERIAL宏。 CObject* (PASCAL* m_pfnCreateObject)()指向创建类对象的默认构造函数的函数指针(仅当类支持动态创建时有效;否则将返回NULL)。 CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )()如果应用程序动态链接到 AFXD...
对于序列化的实现宏IMPLEMENT_SERIAL,还重载了操作符<<和定义了一个静态成员变量 static const AFX_CLASSINIT _init_##class_name(RUNTIME_CLASS(class_name)); 比如,对CPerson来说,该变量是_init_Cperson,其目的在于静态成员在应用程序启动之前被初始化,使得AFX_CLASSINIT类的构造函数被调用,从而通过AFX_CLASSIN...