是否可以将mfc序列化数据读入更高精度的数据类型?

时间:2012-08-30 08:01:16

标签: visual-c++ mfc carchive

我正在使用VS2010中的遗留代码,并将许多数据结构从使用short和float移动到分别使用int和double来修复许多编译器警告。

然而,似乎这打破了mfc序列化(CArchive),因为我再也无法读取旧的序列化数据了。我尝试使用临时变量进行转换,但结果并不令人鼓舞。一些变量被正确读取,其他变量看起来像溢出值,所以我真正想要的是确保“>>”的方法。运算符只读取short或float。

当然,一个选项是恢复到旧的结构,但如果可能的话,我想坚持使用“更现代”的数据类型并修复读取序列化数据的过程。这是可能的,如果是的话,怎么办呢?

1 个答案:

答案 0 :(得分:0)

尝试使用版本架构:


IMPLEMENT_SERIAL(CMyObject, CObject, VERSIONABLE_SCHEMA| new_version_schema)

void CMyObject::Serialize(CArchive& ar) 
{
   if (ar.IsLoading())
   {
      int nVersion = ar.GetObjectSchema();

      switch(nVersion)
      {
      case old_version_schema:
         // read old types short and float convert them to int and double
         break;
      case new_version_schema:
         // read new types int and double
         break;
      default:
         // report unknown version of 
         // this object
         break;
      }
   }
   else
   {
      // new save with int and double
   }