我这里有个问题。在我的主应用程序头文件中,我有以下定义:
#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 for 17.0.7,但我也尝试将测试版本的值也考虑在内,因此也会考虑更大的数字。
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的值,那么它将返回该值。
发布于 2017-06-12 19:26:20
根据MFC和CRuntimeClass类的遗留源(可在Visual的子文件夹中找到),该版本被序列化为WORD值,并保留0xFFFF。因此,版本似乎不能大于0xFFFE (65534)。
https://stackoverflow.com/questions/44472723
复制相似问题