程序代码
在序列化宏IMPLEMENT_SERIAL中定义了一个重载>>的运算符,宏展开如下:
传进去指针的引用,然后>>运算符将根据文件中类的数据构建对象,将对象指针赋给pOb。它通过调用CArchive::ReadObject()函数,来构建出对象并做相应的初始化。
函数首先调用CArchive::ReadClass()函数,从数据中读取出类的CRuntimeClass信息,并返回对应的CRuntimeClass指针。
第一次写入类对象信息: 0xFFFF 版本号 类名称长度 类名称字符串 对象数据
非第一次同一类不同对象(小标记): (0x8000 | nClassIndex) 对象数据
非第一次同一类不同对象(大标记): 0x7FFF (0x80000000 | nClassIndex) 对象数据
非第一次写入相同对象(小标记): nObIndex
非第一次写入相同对象(大标记): 0x7FFF nObIndex
参数意思:
CRuntimeClass* pClassRefRequest 想要读取的CRuntimeClass信息
UINT* pSchema 用于返回读取到的版本号
DWORD* pObTag 用于返回读取到的对象标识
CRuntimeClass::Load()函数从文档中读取类信息,返回类的CRuntimeClass指针。