使用 MFC 串行化数据和 C++ 对象(二)
来源:互联网 发布:淘宝店主有什么模块 编辑:程序博客网 时间:2024/05/22 05:24
我们要
// 串行化宏定义
DECLARE_SERIAL(CPhone)
其次是声明串行化函数,这个原型是必须的,因为要串行化类 CPhone
// 串行化函数 Serialize()
virtual void Serialize(CArchive& ar);
在 CPhone 实现文件中也要加入对应的代码,这个宏也是串行化需要的另一个宏,它有三个参数,第一个是类名,第二个是基类名,第三个是应用程序的版本号,可以将版本号定义为任何值,当串行化数据到文件时,此版本号也要写入文件。
// 串行化宏实现
IMPLEMENT_SERIAL(CPhone,CObject,0);
串行化函数 Serialize() 实现
if (ar.IsStoring())
{
ar << m_Name << m_Phone;
}
else
{
ar >> m_Name >> m_Phone;
}
这里要注意的是为了使用 CObList 类的成员函数 Serialize(),有几个前提条件需要满足:
列表类对象必须是 MFC CObject 类的派生类对象,也就是说 CPhone 类必须是 CObject 的派生类;
在列表中的对象类必须具备一个不带参数的构造函数。如果需要,也可以有其它带参数的构造函数;
必须声明和实现列表类的串行化函数 Serialize(),即 CPhone::Serialize();
实现列表对象的串行化必须使用 DECLARE_SERIAL/IMPLEMENT_SERIAL 宏;
调用列表 Serialize()
这一步是
这样一来,无论用户什么时候从 File 菜单中选择 Save/Save as 时,都将把 m_PhoneList 保存在用户选择的文件中,同样地,无论用户什么时候从选择 Open 时,都将把文件中保存的列表信息加载到 m_PhoneList 中来。m_PhoneList 的串行化调用如下:
m_PhoneList.Serialize(ar);
只要在文档类的 Serialize() 函数中调用上面这条语句时,必须把 ar 作为参数传入,它将完成需要串行化 m_PhoneList 列表数据的所有工作。不必在if语句中再做其它处理。
定制串行化
——例子程序:ARCH
串行化处理有时并不需要用户选择文件,此时仍要从或向一个特定文件串行化数据,本部分将描述怎样创建并定制一个 CArchive 对象。创建一个新的单文档 SDI 应用, 工程名为 ARCH。视图类仍然选择 CFormView。视图中两个编辑框和两个按钮,编辑框用于输入数据,“Save to File”按钮用于将输入的数据串行化到文件,“Load from File”按钮用于从文件中抽取数据。为简单起见,文件使用的硬编码。
下面是 “Save to File”的操作代码:
// 用屏幕输入内容更新 m_Var1 和 m_Var2
UpdateData(TRUE);
// 创建文件 C:ARC.ARC
CFile f;
f.Open("c:\arc.arc",CFile::modeCreate|CFile::modeWrite);
// 创建一个 CArchive 对象,并将文件与对象关联
CArchive ar(&f,CArchive::store);
// 串行化 m_Var1 和 m_Var2 到文档
ar<<m_Var1<<m_Var2;
// 关闭文档
ar.Close();
// 关闭文件
f.Close();
下面是 “Load from File”的操作代码:
// 打开文件 C:ARC.ARC
CFile f;
if ( f.Open("c:\arc.arc",CFile::modeRead == FALSE )
return;
// 创建一个 CArchive 对象,并将文件与对象关联
CArchive ar(&f,CArchive::load);
// 从对象中抽取数据并赋值给成员变量
ar>>m_Var1>>m_Var2;
// 关闭文档
ar.Close();
// 关闭文件
f.Close();
// 更新屏幕显示
UpdateData(FALSE);
以上是三个 MFC 串行化数据的例子,Memo 程序的功能是串行化数据到文件,Phn 程序是串行化 C++ 对象列表到文件,而 ARCH 则是定制串行化。
- 使用 MFC 串行化数据和 C++ 对象(二)
- 使用 MFC 串行化数据和 C++ 对象
- 使用 MFC 串行化数据和 C++ 对象
- 使用 MFC 串行化数据和 C++ 对象(一)
- 使用MFC串行化保存程序数据
- 对象串行化和反串行化
- 使用thrift串行化对象
- 串行化(Serialization)(MFC)
- java串行化——Java中对象的串行化(Serialization)和transient关键字
- 对象的串行化和反串行化
- java中对象的串行化和反串行化
- 对象序列化(串行化)的作用、使用
- 串行化XML(二)
- 对象的串行化(Serialization)和transient
- 使用ANYDATA列对数据串行化(转)
- 使用MFC的CFile文件类和CArchive串行化类进行二进制文件读写操作
- MFC 解密(4 )串行化
- MFC之永久保存(串行化)
- c# webBrowser 获取Ajax信息 .
- php&mysql初探
- 如何分析一个网站的真实流量大小
- 使用 MFC 串行化数据和 C++ 对象(一)
- Android实战技巧:Handler与线程间通信ITC
- 使用 MFC 串行化数据和 C++ 对象(二)
- 网络推广用的数据分析工具
- listview的工作原理与BaseAdapter的执行过程
- 不甘心(续)
- 国外程序员推荐:每个程序员都应读的书
- 用控件聚合技术为FlexGrid增添PickList功能
- XAML实例教程系列 – 开篇
- 关于VC2010工程中的ipch文件夹和sdf文件
- 未来的投影机:智能手机阵列式LED微型投影机