WEB开发网
开发学院软件开发VC 怎样给串行化类分配版本号(可配置版本模式) 阅读

怎样给串行化类分配版本号(可配置版本模式)

 2007-03-15 21:55:24 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 编写可串行化类时,MFC用你指定的模式号制定一个粗略的版本控制方式,怎样给串行化类分配版本号(可配置版本模式),在向档案写数据时, MFC用模式标记该类的实例;而在读回数据时,如果GetObjectSchema在调用Serialize前后调用两次,则返回-1,MFC将档案中的记录的模式

本文示例源代码或素材下载

编写可串行化类时,MFC用你指定的模式号制定一个粗略的版本控制方式。在向档案写数据时, MFC用模式标记该类的实例;而在读回数据时,MFC将档案中的记录的模式号和应用程序中使用着的该类对象的模式号做比较,如果两模式号不匹配,则MFC发送一个CArchiveException,其m_cause 等于CArchiveException::badSchema。没有得到处理的该类异常会促使MFC显示一个对话框,提示 “非预期的文件格式”。如果每次修改对象的串行化存储格式时都能做到增加模式号,那么就不怕这种无心的操作—试图把磁盘中存的老版本对象读入内存里的新版本对象了。

有一个问题经常会突然在使用可串行化类的应用程序中出现,这就是向下兼容。换句话说,就是如何并行化在老版本应用程序中创建的对象。如果对象的持久存储格式随应用程序版本的更新发生了变化,这时你可能希望新版本应用程序对两种格式都能读。但是一旦MFC发现不配套的模式号,它就发送异常。鉴于MFC的结构特点,最好按照MFC的方式处理异常并终止串行化过程。 可视化模式也就产生了。

可视化模式只是包含VERSIONABLE_SCHEMA标志的模式号。标志告诉MFC 应用程序针对某一类能够处理多种串行化的数据格式。这种模式禁止CArchiveException,并允许应用程序对不同的模式号有判断地响应。使用了可视化模式的应用程序可以提供用户希望的向下兼容性。 如果要编写一个具有MFC可视化模式支持的可串行类,一般需要两步:

  • 将IMPLEMENT_SERLAL宏中的模式号与值VERSIONABLE_SCHEMA相或。
  • 如果从档案加载对象时需要调用CArchive::GetObjectSchema,则要修改类的Serialize函数,并相应地调整其并行化例程。GetObjectSchema返回要进行并行化对象的模式号。
  • 调用GetObjectSchema时要注意几个规则。首先,只有对象在被并行化时才能调用。其次,必须在读取档案对象数据之前调用。再者,它只能调用一次。如果GetObjectSchema在调用Serialize前后调用两次,则返回-1。我们先看个例子,这是版本1的CLine类:

    1 2 3 4  下一页

    Tags:怎样 串行 分配

    编辑录入:爽爽 [复制链接] [打 印]
    赞助商链接