2017-06-10 4 views
0

Ich habe ein Problem hier. In meiner Hauptanwendung Header-Datei habe ich diese Definitionen:Mit CArchive :: GetObjectSchema gibt falschen Wert

#define SOUNDROTA_VERSION_171801 171801 // 17.1.8 Beta 1 
#define SOUNDROTA_VERSION_CURRENT 171801 // 17.1.8 Beta 1 

In meiner Anwendung Ich habe eine CObject abgeleitete Klasse, die diese an der Spitze hat:

IMPLEMENT_SERIAL(CChristianLifeMinistryEntry, CObject, VERSIONABLE_SCHEMA | SOUNDROTA_VERSION_CURRENT) 

Dinge immer gut funktioniert haben, wenn das Schema mit Wert bis jetzt. Ich gebe zu, dass zuvor die Werte, die ich verwendete, kleiner waren, wie 1707 für 17.0.7, aber ich habe versucht, auch für Beta-Versionen und damit größere Zahlen zu berücksichtigen.

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 
     { 
     } 
    } 
} 

Mein Problem ist, wenn ich eine Datendatei speichern und dann wieder öffnen, die uSchema hat einen Wert von .

Warum? GetObjectSchema gibt eine UNIT zurück, warum bekomme ich nicht das Schema, das ich angegeben habe?

aktualisieren

Wenn ich einen Wert von 1718 verwenden dann gibt es diesen Wert.

+0

Gibt es niemanden, der dabei helfen kann? Im Moment musste ich die Unterstützung für alte Dateiformate einstellen und meinen eigenen Versionierungsmechanismus verwenden, über den ich nicht glücklich bin. –

Antwort

0

Nach den Legacy-Quellen von MFC und CRuntimeClass Klasse (die in Unterordner von Visual Studio gefunden werden kann), ist die Version serialisiert als WORD Wert und 0xFFFF vorbehalten. Daher scheint es, dass die Version nicht größer als 0xFFFE (65534) sein kann.

Verwandte Themen