Можно ли считать сериализованные данные MFC в типы данных с более высокой точностью?

Я работаю с устаревшим кодом в VS2010 и переместил многие структуры данных с использования short и float на использование int и double, соответственно, для исправления многих предупреждений компилятора.

Однако, похоже, что это сломало сериализацию mfc (CArchive), так как я больше не могу читать старые сериализованные данные. Я пробовал приводить и использовать временные переменные, но результаты не внушают оптимизма. Некоторые переменные читаются правильно, другие выглядят как переполненные значения, поэтому я действительно ищу способ убедиться, что оператор ">>" читает только короткие или плавающие числа.

Конечно, один из вариантов - вернуться к старой структуре, но, если возможно, я бы хотел придерживаться "более современных" типов данных и исправить процедуру чтения сериализованных данных. Возможно ли это, и если да, то как это можно сделать?

1 ответ

Решение

Попробуйте использовать схему версий:


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
   }
Другие вопросы по тегам