📄 13.4.3 版本号.txt
字号:
13.4.3 版本号
上面介绍 IMPLEMENT SERIAL宏时,曾说过它的第三个参数是一个版本号。现在其值为1,如果将值
修改为 2:
iMPLEMENT_SERIAL(CGraph, CObject , 2)
再次运行 Graphic程序,单击【文件\打开】菜单项,选择 Graphic.txt文件打开,程序将弹出如图
13.17所示的警告对话框,提示"非预期的文件格式"。这时因为先前保存数据时使用的版本号是1,
而现在读取时发现对象的版本号。)与保存的版本号 (})不一致,所以程序就会弹出这样的警告消息
框。
图 13.17因版本号不一致而出现的警告信息
读者可以在 CGraph类的 Serialize函数处设置一个断点,并且在 CGraphicDoc类的 Serialize函数
处也设置一个断点。然后调试运行 Graphic程序。先利用相关绘图菜单,在窗 U中绘制一些图形,
然后单击【文件\保存】菜单命令,井选择一个文件(例如 Graphic.txt)保存绘制的图形对象,这时
可以发现程序将会进入 CGraphicDoc类的 Serialize函数。然后单步调试程序,发现当程序执行下
面这条语句时,将跳转到 CGraph类的 Serialize函数处。
ar<<pView->m一obArray.GetAt(i);
然后我们单步调试运行,当前是存储状态,所以利用 CArchive对象保存 CGraph对象三个变量,也
就是我们要保存的图形三个要素。继续调试,因为本例绘制了三条直线,所以三次进入了 CGraph
类的 Serialize函数。通过以上的调试过程,可以看到,对于 CGTaphicDoc类的 Serialize函数来
说,最终在保存对象的数据时,实际上调用的就是对象本身(即 CGraph对象)的 Serialize函数,这
种调用是由框架自动完成的。也就是说,在利用文档类的 Serialize函数保存-个可串行化类的对象
的数据时,实际上利用的是对象本身的 Serialize函数来完成的。因此,对象需要保存和读取的数
据都需要在该对象的 Serialize
514 I胁'
vc忡深λ详解
函数中确定。这就要求在设计可串行化的类时,在其内部确定需要串行化的数据。这就是可串化类
的内部实现机制。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -