MFC 解密(4 )串行化
2010-08-18 14:01
134 查看
关键词:
Serialize(CArchive& ar);
DECLARE_SERIAL
IMPLEMENT_SERIAL
1. 当用户选择打开或者保存文件的时候,系统会调用CDocument::OnSaveDucument(),在这个函数里,首先生成一个 CArchive对象,然后调用Serialize(),由于Serialize()是CObject的虚函数,所以自己的派生类MyDoc::Serialize()会得到调用。
2. 在CMyDoc中,需要序列化的变量必须派生自CObject,在CMyDoc::Serialize中
3. ar<<&m_data实际调用的是CArchive::WriteObject(),在这个函数中调用了m_data这个对象对应的类的Serialize(),然后这个类处理自己需要Serialize的变量。 所以说要串行化的对象必须派生自CObject 否则Serialize不会被调用
5步:
1. 需要保存的对象对应的类必须从CObject派生
2. 该类重写Serialize(),串行化该类要串行化的成员
3. DECLARE_SERIAL
4. IMPLEMENT_SERIAL
5. 定义一个不带参数的构造函数
IMPLEMENT_SERIAL解密
Serialize(CArchive& ar);
DECLARE_SERIAL
IMPLEMENT_SERIAL
1. 当用户选择打开或者保存文件的时候,系统会调用CDocument::OnSaveDucument(),在这个函数里,首先生成一个 CArchive对象,然后调用Serialize(),由于Serialize()是CObject的虚函数,所以自己的派生类MyDoc::Serialize()会得到调用。
2. 在CMyDoc中,需要序列化的变量必须派生自CObject,在CMyDoc::Serialize中
void CMyDocDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here ar << &m_data; } else { // TODO: add loading code here //ar >> &m_data; } }
3. ar<<&m_data实际调用的是CArchive::WriteObject(),在这个函数中调用了m_data这个对象对应的类的Serialize(),然后这个类处理自己需要Serialize的变量。 所以说要串行化的对象必须派生自CObject 否则Serialize不会被调用
// write class of object first CRuntimeClass* pClassRef = pOb->GetRuntimeClass(); WriteClass(pClassRef); // enter in stored object table, checking for overflow CheckCount(); (*m_pStoreMap)[(void*)pOb] = (void*)(DWORD_PTR)m_nMapCount++; // cause the object to serialize itself ((CObject*)pOb)->Serialize(*this);
5步:
1. 需要保存的对象对应的类必须从CObject派生
2. 该类重写Serialize(),串行化该类要串行化的成员
3. DECLARE_SERIAL
4. IMPLEMENT_SERIAL
5. 定义一个不带参数的构造函数
IMPLEMENT_SERIAL解密
#define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) / CObject* PASCAL class_name::CreateObject() / { return new class_name; } / extern AFX_CLASSINIT _init_##class_name; / _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, / class_name::CreateObject, &_init_##class_name) / AFX_CLASSINIT _init_##class_name(RUNTIME_CLASS(class_name)); / CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb) / { pOb = (class_name*) ar.ReadObject(RUNTIME_CLASS(class_name)); / return ar; }
相关文章推荐
- 使用 MFC 串行化数据和 C++ 对象(二)
- MFC六大关键技术(第四部分)——永久保存(串行化)
- mfc 对话框 Crypto++库在VS 2013中的使用——RSA加解密实例。
- mfc 序列化类(串行化类)的继承和虚函数应用
- MFC如何生成一个可串行化的类
- MFC六大关键技术之(四)——永久保存(串行化)
- MFC 解密(5)消息机制
- MFC之永久保存(串行化)
- MFC六大核心机制之四:永久保存(串行化)
- MFC 文件I/O和串行化
- 使用 MFC 串行化数据和 C++ 对象(一)
- 孙鑫MFC笔记之八--文档串行化
- MFC六大关键技术之(四)——永久保存(串行化)
- MFC六大关键技术之(四)——永久保存(串行化)
- MFC Windows 程序设计 第六章 文件I/O与串行化
- mfc串行化中遇到的问题
- 在MFC中将类串行化存储
- [VC++(MFC)]串行化(Serialization)
- MFC六大关键技术(第四部分)——永久保存(串行化)
- MFC六大核心机制之四:永久保存(串行化)