CArchive::GetObjectSchema

更新 : 2007 年 11 月

Serialize 関数から呼び出して、現在逆シリアル化しているオブジェクトのバージョンを判断します。

UINT GetObjectSchema( );

戻り値

逆シリアル化中は、読み込まれているオブジェクトのバージョンを返します。

解説

この関数は、CArchive オブジェクトを読み込んでいる場合に限り、呼び出すことができます。CArchive::IsLoading はゼロ以外の値を返します。この関数は、ほかの Serialize 関数よりも先に呼び出します。また、実行できるのは一度だけです。(UINT)–1 の戻り値は、バージョン番号が不明であることを示します。

CObject の派生クラスでは、VERSIONABLE_SCHEMA を (IMPLEMENT_SERIAL マクロの) スキーマ バージョン自体と (ビット単位の OR を使用して) 組み合わせて使用し、"バージョン管理可能なオブジェクト" を作成できます。バージョン管理可能なオブジェクトとは、Serialize メンバ関数が複数のバージョンを読み込むことができるオブジェクトです。(VERSIONABLE_SCHEMA を使用しない) 既定のフレームワーク機能では、バージョンが一致しない場合、例外がスローされます。

使用例

IMPLEMENT_SERIAL(CSchemaObject, CObject, VERSIONABLE_SCHEMA | 1)

void CSchemaObject::Serialize(CArchive& ar) 
{
   CObject::Serialize(ar);

   if (ar.IsLoading())
   {
      int nVersion = ar.GetObjectSchema();

      switch(nVersion)
      {
         case 0:
            // read in previous version of 
            // this object
            break;
         case 1:
            // read in current version of
            // this object
            break;
         default:
            // report unknown version of 
            // this object
            break;
      }
   }
   else
   {
     // Normal storing code goes here
   }
}

必要条件

ヘッダー : afx.h

参照

参照

CArchive クラス

階層図

CObject::Serialize

CObject::IsSerializable

IMPLEMENT_SERIAL

DECLARE_SERIAL

CArchive::IsLoading

その他の技術情報

CArchive のメンバ