GetObjectSchemaで取得する、バージョンは
どのタイミングで設定されるのでしょうか?
クラスをnewするタイミングでしょうか?
よろしくお願いします。
追記します。
クラスをnewせず、
ドキュメントクラスに、変数(ポインタ型でない通常の変数)を宣言
するだけでは、
バージョンは設定されていないようですが(GetObjectSchemaで-1が戻る)、
そのようなものでしょうか?
よろしくお願いします。
追記します。
下記のソースにて、ファイル保存後、
保存ファイルを開く時に、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);
}
追記します。
下記URLで
ドキュメントクラスにCTypedPtrArray型の変数を用意し、
CTypedPtrArrayのシリアライズ関数を使用していますが、
CTypedPtrArrayの配列にデータを追加後、
シリアライズしないとクラスのバージョン管理はできないのでしょうか?
http://live.under.jp/todashou/tips/MFC/serialize_info.html
どなたかご教授ねがいます。
SetObjectSchemaしてなければ取得できないでしょうね…
ツイート | ![]() |