我这里有问题。在我的主应用程序头文件中,我有以下定义:
#define SOUNDROTA_VERSION_171801 171801 // 17.1.8 Beta 1
#define SOUNDROTA_VERSION_CURRENT 171801 // 17.1.8 Beta 1
在我的应用程序中,我有一个CObject
派生类,它位于顶部:
IMPLEMENT_SERIAL(CChristianLifeMinistryEntry, CObject, VERSIONABLE_SCHEMA | SOUNDROTA_VERSION_CURRENT)
到目前为止,使用模式值时,事情总是很好。我承认之前我使用的值较小,如1707
17.0.7 ,但我也试图考虑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
返回UNIT
,为什么我没有得到我指定的架构?
如果我使用值1718
,则返回该值。
答案 0 :(得分:0)
根据 MFC 和CRuntimeClass
类的遗留来源(可以在Visual Studio的子文件夹中找到),版本被序列化为WORD
值并且保留0xFFFF
。因此,看起来版本不能大于0xFFFE
(65534)。