问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教大虾们:关于MFC Serialize()函数的使用机制,急!有分~

发布网友 发布时间:2022-06-12 08:46

我来回答

2个回答

热心网友 时间:2023-10-08 21:45

要让一个类能够实现串行化,要先让该类支持串行化,经过这样五个步骤:
1:该类派生于CObject,即在该类头文件中申明
2.在该类头文件中添加宏申明:DECLARE_SERIAL(class_name)
3.该类CPP文件中添加实现的宏申明:IMPLEMENT_SERIA(class_name,base_name,版本号)
4重写serial()
5构造一个该类的无参构造函数,
经过这样五个步骤才能使得在该类中正确使用serial()进行数据的串行化

热心网友 时间:2023-10-08 21:45

CObject

CObject为Microsoft基础类库中主要的基类。它不仅用作库类,例如CFile和CObList的根,而且也是自己编写的类的根。CObject类提供了基本的服务,其中包括: · 支持串行化
· 运行类信息
· 对象诊断输出
· 与收集类兼容
注意:CObject类不支持多继承。派生的类仅仅拥有一个CObject基类,并且CObject在等级体系中必须位于最左边。不过,它也允许在多继承分支的右边有其结构及非CObject派生类。
如果在类的执行与声明过程中使用了可选的宏,那么你将发现CObject派生的主要优点。
第一层次的宏,DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC,允许在等级体系中运行时访问类名及位置。这样,将允许依次地进行有意义的诊断转储。
第二层次的宏,DECLARE_SERIAL和IMPLEMENT_SERIAL,包含了第一层次宏的所有功能,并且能够使对象到“档案”有效地串行化。
如果要了解有关通常条件下派生的Microsoft基础类和C++类,以及如何使用CObject类的更多信息,请参阅联机文档“Visual C++程序员指南”中的“CObject类主题”及“串行化(对象永久化)”。
#include <afx.h>

CObject类的成员

构造函数 CObject 缺省的构造函数
CObject 拷贝构造函数
operator new 特别的new操作
operator delete 特别的delete操作
operator = 赋值操作

诊断 AssertValid 证实该对象的完整性
Dump 进行该对象的诊断转储

串行化 IsSerializable 测试该对象是否被串行化
Serialize 从档案文件中装载或向档案文件中存储某对象

多面性 GetRuntimeClass 返回对应该对象类的CRuntimeClass结构
IsKindOf 测试该对象是否与指定类相关联

CObject::Serialize

virtual void Serialize( CArchive& ar );
throw( CMemoryException );
throw( CArchiveException );
throw( CFileException );

参数: ar 被串行化的CArchive对象。

说明:
从档案文件中读取该对象或向档案文件中写入该对象。
必须为希望串行化的每个类覆盖Serialize。被覆盖的Serialize首先必须调用基类的Serialize函数。
在类的声明中必须使用DECLARE_SERIAL宏,并且在类的执行过程中也必须使用IMPLEMENT_SERIAL宏。
使用CArchive::IsLoading或CArchive::IsStoring函数,用于决定是否装载或存储了档案文件。
通过CArchive::ReadObject和CArchive::WriteObject来调用Serialize函数。这些函数与CArchive插入操作符(<<)和抽出操作符(>>)相关联。
如果要了解有关串行化的例子,请参阅联机文档“Visual C++程序员指南” 中的“串行化(对象永久化)”。

示例:请参阅ObList::CObList,了解所有CObject示例中使用的CAge类。
// example for CObject::Serialize
void CAge::Serialize( CArchive& ar )
{
CObject::Serialize( ar );
if( ar.IsStoring() ) ar << m_years;
else ar >> m_years;
}

CArchive::IsStoring

BOOL IsStorng( ) const;

返回值:
如果正在存储归档文件,则返回非零值,否则为0。

说明:
确定是否正在存储归档文件。这个函数由归档文件类的Serialize函数调用。
如果归档文件的IsStoring状态为非零,则它的IsLoading状态为0,反之亦然。

示例:
int i;
extern CArchive ar;
if(ar.IsStoring( )) ar< else ar>>i;

请参阅:CArchive::IsLoading

参考资料:http://hi.baidu.com/ypxmaomao/blog/item/10f17cf4d55d7069dcc4741f.html

请教大虾们:关于MFC Serialize()函数的使用机制,急!有分~

2.在该类头文件中添加宏申明:DECLARE_SERIAL(class_name)3.该类CPP文件中添加实现的宏申明:IMPLEMENT_SERIA(class_name,base_name,版本号)4重写serial()5构造一个该类的无参构造函数,经过这样五个步骤才能使得在该类中正确使用serial()进行数据的串行化 ...

函数的概念 函数连续的条件 有界函数 请教的近 MID函数 int函数 函数是什么 连续函数 状态函数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
当前我国经济工作的主线是什么 空调几匹最合适房间 高考时带手表进考场会被监考老师没收吗? 大方县办营业执照在哪里呀 石林县城办营业执照在哪里 家里潮湿有味道怎么办 家里潮湿有味道怎么改善 蛋糕的做法家庭做法蒸蛋糕 黄煌经方沙龙(第一期)        目录       _百... 如何为朋友妈妈庆祝生日呢? 大学班长生日祝福语 给小阿姨的生日祝福语 有谁会用matlab来进行多面函数拟合,我已经有程序,但是看不懂 有四种足量的氨基酸组成的四肽最多有几种 惠普生的维E有什么作用 惠普生维生素e纯度多少 惠普生维生素e怎么服用 惠普生牌天然维生素e有什么作用 惠普生维生素E好不好 惠普生维生素e怎么样 惠普生天然维生素E效果怎么样? 惠普生天然维生素E效果怎么样呀? 激光武器的烧蚀效应是什么? 激光烧蚀原理 求激光切割2MM钛合金切割参数 我打农业银行的95599人工服务 打通之后输入卡号还要输入银行密码安全吗? 没有擦丝器怎么擦丝 擦丝的工具叫什么 擦丝器的介绍 oppo怎样登别人的在自己的手机上 如何登陆别人码不需要验证码 香草圆子jk制服原创是正的吗? 拼多多网络机顶盒靠谱吗 魔兽带幻化的坐骑怎么获得 怎么样才会下雨? 瑞丽市的邮政编码是多少 云南省瑞丽市邮编号是多少 云南省瑞丽市的邮政编码是多少河南省镇平县的邮政编码是多少 云南省瑞丽市的邮编多少 云南省德宏州瑞丽市姐告区的邮政编码是多少? qq游览器字体怎么黑了?原来应该是蓝的吧?没调黑夜模式没更新过,跟 苹果电脑安装win7,不知道怎么升级了,怎么强行中断升级win10? lenovoideapad310s屏幕刷新率多少 联想ideapad 310S 怎么样 情绪分析内观疗法的意思? 情绪主观体验测评方法 联想笔记本开关排线掉了 笔记本开机键里面的线断了 怎么办 自己能修好吗 微信群群主变成了企业,微信群突然变成了企业外部群,该怎么办? 新破天一剑代练咨询,懂的来 家用2匹空调有几个节流装置? 空调外机是两匹的内机是三匹的组装到一起会怎么样制热?