CArchive::GetObjectSchema

UINT GetObjectSchema( )

返回值:返回在非串行化过程中,被读入对象的版本。

说明:
由Serialize函数调用此函数,确定当前被非串行化的对象的版本。当CArchive对象正在被装载时,调用此函数才是有效的(CArchive::IsLoading则返回非零值)。它必须是Serialize函数的第一次调用而且只能调用一次。返回值-1(UINT)说明版本数未知。
CObject派生类可以使用与大纲版本自己(在IMPLEMENT_SERIALH宏里)结合起来使用的VERSIONABLE_SEHEMA,创建一个“版本化对象”,即一个对象它的成员函数可以读入多个版本。当版本不匹配时,缺省的框架功能(不带有VERSIONABLE_SHEMA)将异常信号。

示例:
IMPLEMENT_SERIAL(CMyObject,CObject,VERSIOANABLE_SCHEMA|1)
void CMyObject::Serialize(CArchive& ar)
{
  if (ar.Isloading( ))
  {
    int nVersion = ar.GetObjectSchma( );
    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 soring code goes here
  }
}

请参阅:
CObject::Serialize, CObject::IsSerializable, IMPLEMENT_SERIAL, DECLARE_SERIAL, CArchive::IsLoading