2017-06-10 11 views
0

ここに問題があります。私はこれらの定義を持っている私のメインのアプリケーションヘッダファイルでは:私のアプリケーションで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) 

物事は常にうまく働いています今までの価値私が以前使用していた値は17.0.7のように1707のように小さくなっていましたが、私はベータ版とそれ以上の数を考慮に入れようとしていました。

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がの値を持っている、です。

なぜですか? GetObjectSchemaUNITを返すので、指定したスキーマが取得できないのはなぜですか?

更新

私は1718の値を使用する場合、それはその値を返します。

+0

誰も助けてくれる人はいませんか?現時点では、私は古いファイル形式をサポートしなくてはならず、自分自身のバージョン管理の仕組みを使用しなければなりませんでした。 –

答えて

0

(Visual Studioのサブフォルダの中に見出すことができる)MFCCRuntimeClassクラスのレガシーソースによれば、バージョンはWORD値としてシリアル化され、0xFFFFが予約されています。したがって、バージョンは0xFFFE(65534)より大きくなることはできません。

関連する問題