0

私はVS2010でレガシーコードを扱っており、多くのデータ構造をshortとfloatの使用からintとdoubleの使用にそれぞれ移動して、多くのコンパイラ警告を修正しました。

ただし、古いシリアル化されたデータを読み取ることができなくなったため、これにより mfc シリアル化 (CArchive) が壊れたようです。キャストして一時変数を使用してみましたが、結果は有望ではありません。正しく読み取られる変数もあれば、オーバーフローした値のように見える変数もあります。そのため、実際に探しているのは、">>" 演算子が short または float のみを読み取るようにする方法です。

もちろん、1 つのオプションは古い構造に戻すことですが、可能であれば、「より現代的な」データ型に固執し、シリアル化されたデータを読み取る手順を修正したいと考えています。これは可能ですか?

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 に答える