使用CArchive :: GetObjectSchema返回错误的值

时间:2017-06-10 11:18:23

标签: carchive

我这里有问题。在我的主应用程序头文件中,我有以下定义:

#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,则返回该值。

1 个答案:

答案 0 :(得分:0)

根据 MFC CRuntimeClass类的遗留来源(可以在Visual Studio的子文件夹中找到),版本被序列化为WORD值并且保留0xFFFF。因此,看起来版本不能大于0xFFFE(65534)。