0

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

#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)

到目前为止,使用模式值时一切都很好。我承认以前我使用的值较小,例如170717.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返回 aUNIT那么为什么我没有得到我指定的架构?

更新

如果我使用一个值,1718那么它会返回该值。

4

1 回答 1

0

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

于 2017-06-12T19:26:20.560 回答