使用 CArchive::GetObjectSchema 返回错误值

Posted

技术标签:

【中文标题】使用 CArchive::GetObjectSchema 返回错误值【英文标题】:Using CArchive::GetObjectSchema returns wrong value 【发布时间】:2017-06-10 11:18:23 【问题描述】:

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

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

到目前为止,使用架构值时一切正常。我承认以前我使用的值较小,例如 17.0.71707,但我也尝试将 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】:

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

【讨论】:

以上是关于使用 CArchive::GetObjectSchema 返回错误值的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)