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