Использование CArchive::GetObjectSchema возвращает неправильное значение

У меня есть проблема здесь. В моем основном заголовочном файле приложения у меня есть эти определения:

#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, но я пытался учесть и бета-версии, и, следовательно, большие цифры.

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 ответ

Решение

Согласно устаревшим источникам МФЦ и CRuntimeClass класс, (который можно найти в подпапках Visual Studio), версия сериализуется как WORD значение и 0xFFFF зарезервировано Таким образом, кажется, что версия не может быть больше, чем 0xFFFE (65534).

Другие вопросы по тегам