GetObjectSchemaについて


入隊  2007-06-26 02:00:50  No: 65486

GetObjectSchemaで取得する、バージョンは
どのタイミングで設定されるのでしょうか?

クラスをnewするタイミングでしょうか?

よろしくお願いします。


入隊  2007-06-26 03:35:13  No: 65487

追記します。

クラスをnewせず、
ドキュメントクラスに、変数(ポインタ型でない通常の変数)を宣言
するだけでは、
バージョンは設定されていないようですが(GetObjectSchemaで-1が戻る)、
そのようなものでしょうか?

よろしくお願いします。


入隊  2007-06-26 23:16:35  No: 65488

追記します。

下記のソースにて、ファイル保存後、
保存ファイルを開く時に、GetObjectSchema関数で、
スキーマ番号が取得できません。(−1が取得される)

何かお気づきの点がありましたらご教授願います。

なお、VC++6.0のMFC(SDI)です。

// *** CData クラス ***

class CData : public CObject  
{
DECLARE_SERIAL(CData)
public:
    CData();
    virtual ~CData();

    void Serialize(CArchive& ar);

    int intA;
};

IMPLEMENT_SERIAL(CData ,CObject ,VERSIONABLE_SCHEMA |1)

void CData::Serialize(CArchive& ar)
{
    CObject::Serialize(ar);

    if(ar.IsStoring())
    {
  ar << intA;
    }
    else
    {
         int Ver = ar.GetObjectSchema();   // <--- 「-1」が取得される
  ar >> intA;
    }
}

// *** CAaaDoc クラス ***

class CAaaDoc : public CDocument
{
    Serialize(CArchive& ar);

    CData m_data;  
};

void CAaaDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
    // TODO: この位置に保存用のコードを追加してください。

    }
    else
    {
    // TODO: この位置に読み込み用のコードを追加してください。

    }
    m_data.Serialize(ar);
}


入隊  2007-06-27 06:25:14  No: 65489

追記します。

下記URLで
ドキュメントクラスにCTypedPtrArray型の変数を用意し、
CTypedPtrArrayのシリアライズ関数を使用していますが、
CTypedPtrArrayの配列にデータを追加後、
シリアライズしないとクラスのバージョン管理はできないのでしょうか?

http://live.under.jp/todashou/tips/MFC/serialize_info.html

どなたかご教授ねがいます。


シャノン  2007-07-10 20:52:52  No: 65490

SetObjectSchemaしてなければ取得できないでしょうね…


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加