MFCを使用してデータとC++オブジェクトをシリアル化する(二)
3592 ワード
シリアル処理
CPhoneオブジェクトをシリアル化し、C++オブジェクトをファイルに書き込むため、CPhoneクラスの定義と実装ファイルに対応するシリアル化コードを追加する必要があります.まず、CPhoneヘッダファイルにMFCマクロを追加します.これはシリアル化に必要なマクロで、パラメータ、つまりクラスの名前を提供する必要があります.
次にシリアル化関数を宣言します.このプロトタイプは必須です.クラスCPhoneオブジェクトのリストをシリアル化するため、CPhoneクラスには独自のSerialize()関数が必要です.
CPhone実装ファイルにも対応するコードを追加します.このマクロもシリアル化に必要な別のマクロです.3つのパラメータがあります.1つ目はクラス名、2つ目はベースクラス名、3つ目はアプリケーションのバージョン番号です.バージョン番号を任意の値として定義できます.データをファイルにシリアル化すると、このバージョン番号もファイルに書き込まれます.
シリアル関数Serialize()実装
ここで注意したいのは、CObListクラスのメンバー関数Serialize()を使用するために、いくつかの前提条件を満たす必要があることです.
リストクラスオブジェクトはMFC CObjectクラスの派生クラスオブジェクトでなければならない.つまりCPhoneクラスはCObjectの派生クラスでなければならない.
リスト内のオブジェクトクラスには、パラメータを持たないコンストラクション関数が必要です.必要に応じて、他のパラメータ付き構造関数もあります.
リストクラスのシリアル化関数Serialize()、すなわちCPhone::Serialize()を宣言および実装する必要があります.
リスト・オブジェクトのシリアル化にはDECLARE_を使用する必要があります.SERIAL/IMPLEMENT_SERIALマクロ;
呼び出しリストSerialize()関数
このステップはシリアル化リストm_PhoneList、つまりm_を呼び出すPhoneListのメンバー関数Serialize()です.どこで呼び出しますか?ユーザーがいつ「File」メニューから「Save」または「Save as」または「Open」オプションを選択しても、ドキュメントクラスのSerialize()関数が実行されるので、ドキュメントクラスのSerialize()関数でm_を呼び出す必要があります.PhoneListのSerialize()関数.
これにより,ユーザがいつFileメニューからSave/Save asを選択してもm_PhoneListは、ユーザが選択したファイルに保存され、同様に、ユーザがいつOpenを選択したときでも、ファイルに保存したリスト情報をm_PhoneListから来ます.m_PhoneListのシリアルコールは以下の通りです.
ドキュメントクラスのSerialize()関数で上記の文を呼び出す場合、arをパラメータとして入力する必要があります.これにより、m_のシリアル化が完了します.PhoneListリストデータのすべての作業.if文で他の処理をする必要はありません.
カスタムシリアル化
——例プログラム:ARCH
シリアル化処理では、ユーザーがファイルを選択する必要がない場合もありますが、このセクションでは、CArchiveオブジェクトを作成してカスタマイズする方法について説明します.新しい単一ドキュメントSDIアプリケーションを作成します.プロジェクト名はARCHです.ビュークラスはCFOrmViewを選択したままです.ビュー内の2つの編集ボックスと2つのボタン、編集ボックスはデータを入力するために使用され、「Save to File」ボタンは入力したデータをファイルにシリアル化するために使用され、「Load from File」ボタンはファイルからデータを抽出するために使用されます.簡単にするために、ファイルに使用されるハードコーディング.
次は「Save to File」の操作コードです.
次は「Load from File」の操作コードです.
以上が3つのMFCシリアル化データの例であり、Memoプログラムの機能はデータをファイルにシリアル化し、PhnプログラムはC++オブジェクトリストをファイルにシリアル化し、ARCHはカスタムシリアル化する.
CPhoneオブジェクトをシリアル化し、C++オブジェクトをファイルに書き込むため、CPhoneクラスの定義と実装ファイルに対応するシリアル化コードを追加する必要があります.まず、CPhoneヘッダファイルにMFCマクロを追加します.これはシリアル化に必要なマクロで、パラメータ、つまりクラスの名前を提供する必要があります.
//
DECLARE_SERIAL(CPhone)
次にシリアル化関数を宣言します.このプロトタイプは必須です.クラスCPhoneオブジェクトのリストをシリアル化するため、CPhoneクラスには独自のSerialize()関数が必要です.
// Serialize()
virtual void Serialize(CArchive& ar);
CPhone実装ファイルにも対応するコードを追加します.このマクロもシリアル化に必要な別のマクロです.3つのパラメータがあります.1つ目はクラス名、2つ目はベースクラス名、3つ目はアプリケーションのバージョン番号です.バージョン番号を任意の値として定義できます.データをファイルにシリアル化すると、このバージョン番号もファイルに書き込まれます.
//
IMPLEMENT_SERIAL(CPhone,CObject,0);
シリアル関数Serialize()実装
if (ar.IsStoring())
{
ar << m_Name << m_Phone;
}
else
{
ar >> m_Name >> m_Phone;
}
ここで注意したいのは、CObListクラスのメンバー関数Serialize()を使用するために、いくつかの前提条件を満たす必要があることです.
リストクラスオブジェクトはMFC CObjectクラスの派生クラスオブジェクトでなければならない.つまりCPhoneクラスはCObjectの派生クラスでなければならない.
リスト内のオブジェクトクラスには、パラメータを持たないコンストラクション関数が必要です.必要に応じて、他のパラメータ付き構造関数もあります.
リストクラスのシリアル化関数Serialize()、すなわちCPhone::Serialize()を宣言および実装する必要があります.
リスト・オブジェクトのシリアル化にはDECLARE_を使用する必要があります.SERIAL/IMPLEMENT_SERIALマクロ;
呼び出しリストSerialize()関数
このステップはシリアル化リストm_PhoneList、つまりm_を呼び出すPhoneListのメンバー関数Serialize()です.どこで呼び出しますか?ユーザーがいつ「File」メニューから「Save」または「Save as」または「Open」オプションを選択しても、ドキュメントクラスのSerialize()関数が実行されるので、ドキュメントクラスのSerialize()関数でm_を呼び出す必要があります.PhoneListのSerialize()関数.
これにより,ユーザがいつFileメニューからSave/Save asを選択してもm_PhoneListは、ユーザが選択したファイルに保存され、同様に、ユーザがいつOpenを選択したときでも、ファイルに保存したリスト情報をm_PhoneListから来ます.m_PhoneListのシリアルコールは以下の通りです.
m_PhoneList.Serialize(ar);
ドキュメントクラスのSerialize()関数で上記の文を呼び出す場合、arをパラメータとして入力する必要があります.これにより、m_のシリアル化が完了します.PhoneListリストデータのすべての作業.if文で他の処理をする必要はありません.
カスタムシリアル化
——例プログラム:ARCH
シリアル化処理では、ユーザーがファイルを選択する必要がない場合もありますが、このセクションでは、CArchiveオブジェクトを作成してカスタマイズする方法について説明します.新しい単一ドキュメントSDIアプリケーションを作成します.プロジェクト名はARCHです.ビュークラスはCFOrmViewを選択したままです.ビュー内の2つの編集ボックスと2つのボタン、編集ボックスはデータを入力するために使用され、「Save to File」ボタンは入力したデータをファイルにシリアル化するために使用され、「Load from File」ボタンはファイルからデータを抽出するために使用されます.簡単にするために、ファイルに使用されるハードコーディング.
次は「Save to File」の操作コードです.
// m_Var1 m_Var2
UpdateData(TRUE);
// C:ARC.ARC
CFile f;
f.Open("c:\arc.arc",CFile::modeCreate|CFile::modeWrite);
// CArchive ,
CArchive ar(&f,CArchive::store);
// m_Var1 m_Var2
ar<<m_Var1<<m_Var2;
//
ar.Close();
//
f.Close();
次は「Load from File」の操作コードです.
// C:ARC.ARC
CFile f;
if ( f.Open("c:\arc.arc",CFile::modeRead == FALSE )
return;
// CArchive ,
CArchive ar(&f,CArchive::load);
//
ar>>m_Var1>>m_Var2;
//
ar.Close();
//
f.Close();
//
UpdateData(FALSE);
以上が3つのMFCシリアル化データの例であり、Memoプログラムの機能はデータをファイルにシリアル化し、PhnプログラムはC++オブジェクトリストをファイルにシリアル化し、ARCHはカスタムシリアル化する.