Использование 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).