使用 CArchive::GetObjectSchema returns 错误值
Using CArchive::GetObjectSchema returns wrong value
我这里有问题。在我的主应用程序头文件中,我有这些定义:
#define SOUNDROTA_VERSION_171801 171801 // 17.1.8 Beta 1
#define SOUNDROTA_VERSION_CURRENT 171801 // 17.1.8 Beta 1
在我的应用程序中,我有一个 CObject
派生的 class,它在顶部有这个:
IMPLEMENT_SERIAL(CChristianLifeMinistryEntry, CObject, VERSIONABLE_SCHEMA | SOUNDROTA_VERSION_CURRENT)
到目前为止,使用架构值时一切正常。我承认以前我使用的值较小,例如 17.0.7 的 1707
但我也试图将 beta 版本考虑在内,因此数字更大。
void CChristianLifeMinistryEntry::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if (ar.IsStoring())
{ // saving code
else
{ // loading code
UINT uSchema = ar.GetObjectSchema();
if (uSchema >= SOUNDROTA_VERSION_171801)
{
AfxMessageBox(_T("Booh"));
}
else
{
}
}
}
我的问题是,当我保存数据文件然后重新打开它时,uSchema
的值为 40729.
为什么? GetObjectSchema
returns a UNIT
为什么我没有得到指定的模式?
更新
如果我使用 1718
的值,那么它 returns 该值。
根据 MFC 和 CRuntimeClass
class 的遗留资源(可以在 Visual Studio 的子文件夹中找到), version 被序列化为 WORD
值并且 0xFFFF
被保留。因此,版本似乎不能大于 0xFFFE
(65534).
我这里有问题。在我的主应用程序头文件中,我有这些定义:
#define SOUNDROTA_VERSION_171801 171801 // 17.1.8 Beta 1
#define SOUNDROTA_VERSION_CURRENT 171801 // 17.1.8 Beta 1
在我的应用程序中,我有一个 CObject
派生的 class,它在顶部有这个:
IMPLEMENT_SERIAL(CChristianLifeMinistryEntry, CObject, VERSIONABLE_SCHEMA | SOUNDROTA_VERSION_CURRENT)
到目前为止,使用架构值时一切正常。我承认以前我使用的值较小,例如 17.0.7 的 1707
但我也试图将 beta 版本考虑在内,因此数字更大。
void CChristianLifeMinistryEntry::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if (ar.IsStoring())
{ // saving code
else
{ // loading code
UINT uSchema = ar.GetObjectSchema();
if (uSchema >= SOUNDROTA_VERSION_171801)
{
AfxMessageBox(_T("Booh"));
}
else
{
}
}
}
我的问题是,当我保存数据文件然后重新打开它时,uSchema
的值为 40729.
为什么? GetObjectSchema
returns a UNIT
为什么我没有得到指定的模式?
更新
如果我使用 1718
的值,那么它 returns 该值。
根据 MFC 和 CRuntimeClass
class 的遗留资源(可以在 Visual Studio 的子文件夹中找到), version 被序列化为 WORD
值并且 0xFFFF
被保留。因此,版本似乎不能大于 0xFFFE
(65534).