看侯俊杰的《深入浅出MFC》中关于串行化那部分,感觉Serialize(CArchive &ar)必须和DECLARE_SERIAL/IMPLEMENT_SERIAL宏“成双成对”才可以,网上也看到了实现序列化的的类需要满足的五个条件:
1. 该类需要从CObject类派生(可以是间接派生);
2. 在类中中进行DECLARE_SERIAL宏定义;
3. 类存在有缺省的构造函数;
4. 类中实现了Serialize()函数,并且在其中调用基类的序列化函数;
5. 使用IMPLEMENT_SERIAL宏指明类名及版本号;但是《深入浅出MFC》有这么段程序(p340)
class CScribbleDoc:public CDocument
{
DECLARE_DYNCREATE(CScribbleDoc);
……
virtual void Serialize(CArchive &ar);
DECLARE_MESSAGE_MAP();
}
void CScribbleDoc::Serialize(CArchive &ar)
{……}
为什么这里不用DECLARE_SERIAL/IMPLEMENT_SERIAL宏也可以用Serialize(CArchive &ar)???不明白了
1. 该类需要从CObject类派生(可以是间接派生);
2. 在类中中进行DECLARE_SERIAL宏定义;
3. 类存在有缺省的构造函数;
4. 类中实现了Serialize()函数,并且在其中调用基类的序列化函数;
5. 使用IMPLEMENT_SERIAL宏指明类名及版本号;但是《深入浅出MFC》有这么段程序(p340)
class CScribbleDoc:public CDocument
{
DECLARE_DYNCREATE(CScribbleDoc);
……
virtual void Serialize(CArchive &ar);
DECLARE_MESSAGE_MAP();
}
void CScribbleDoc::Serialize(CArchive &ar)
{……}
为什么这里不用DECLARE_SERIAL/IMPLEMENT_SERIAL宏也可以用Serialize(CArchive &ar)???不明白了
解决方案 »
- MFC 控件的点击事件
- 请教 如何在全局函数中获取某控件的句柄?
- 怎么给一个区域(region)做color modeling。
- toolbar上scrollbar的操作,以及关于EnableMenuItem
- 怎么把DC中的绘制的东东保存为JPG图片,高分呀!!!
- 如何截获鼠标在工具栏上动作?急!!!
- 急,两个问题200分,关于CListCtrl中加两个checkbox和toolBar的停靠
- undocumented NT 下载
- 怎样用程序注册一个FILENAME.SYS驱动程序的服务?
- 如何自处理最小化函数?
- ============= 关于CWnd 窗口问题 =============
- 关于“WM_MOUSELEAVE”消息
_DECLARE_DYNCREATE(class_name) \
AFX_API friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);
If you call Serialize directly rather than through the >> and << operators of CArchive, the last three steps are not required for serialization.