0

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

但是,这似乎破坏了 mfc 序列化(CArchive),因为我无法再读取旧的序列化数据。我尝试强制转换和使用临时变量,但结果并不令人鼓舞。有些变量被正确读取,有些看起来像溢出的值,所以我真正要寻找的是一种方法来确保“>>”运算符只读取一个短或浮点数。

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

4

1 回答 1

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
   }

于 2012-08-30T08:32:47.877 回答