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

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

 2007-03-15 21:55:24 来源:WEB开发网   
核心提示: 现在工作只做到一半,最后一步是修改CLine::Serialize,怎样给串行化类分配版本号(可配置版本模式)(3),使它根据GetObjectSchema不同的返回值并行化CLine,原Serialize函数如下:void CLine::Serialize (CArchive& ar){

现在工作只做到一半。最后一步是修改CLine::Serialize,使它根据GetObjectSchema不同的返回值并行化CLine。原Serialize函数如下:void CLine::Serialize (CArchive& ar)
{
  CObject::Serialize (ar);
  if (ar.IsStoring ())
    ar << m_ptFrom << m_ptTo;
  else // Loading, not storing
    ar >> m_ptFrom >> m_ptTo;
}
新函数如下:void CLine::Serialize (CArchive& ar)
{
  CObject::Serialize (ar);
  if (ar.IsStoring ())
    ar << m_ptFrom << m_ptTo << m_clrLine;
  else {
    UINT nSchema = ar.GetObjectSchema ();
    switch (nSchema) {
    case 1: // Version 1 CLine
      ar >> m_ptFrom >> m_ptTo;
      m_clrLine = RGB (0, 0, 0); // Default color
      break;
    case 2: // Version 2 CLine
      ar >> m_ptFrom >> m_ptTo >> m_clrLine;
      break;
    default: // Unknown version
      AfxThrowArchiveException (CArchiveException::badSchema);
      break;
    }
  }
}
  明白它是怎样工作的吗?CLine对象写到档案上时,它的格式总是CLine的第2个版本。但是读取 CLine时,根据GetObjectSchema返回值的不同,它又被当做CLine版本1或版本2读回。如果模式号为1,则对象按老方式读取,并把m_clrLine设置为默认值。如果模式号为2,则对象所以数据成员,包括 m_clrLine,都要从档案中读取出来。其他模式号会导致CArchiveException,表示不能识别版本号(如果发生异常,可能是因为程序错了或档案坏了。)如果将来还要修改CLine,则要把模式号增加到3并给新模式添加一个case程序段。

上一页  1 2 3 4  下一页

Tags:怎样 串行 分配

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