次の方法で共有


MFC でのシリアル化

この記事では、プログラムの実行間にオブジェクトを保持できるようにするために、Microsoft Foundation クラス ライブラリ (MFC) で提供されるシリアル化メカニズムについて説明します。

シリアル化は、ディスク ファイルなどの永続ストレージ メディアとの間でオブジェクトを書き込んだり読み取ったりするプロセスです。 シリアル化は、プログラムの実行中または実行後に構造化データ (C++ クラスや構造体など) の状態を維持する必要がある場合に最適です。 MFC によって提供されるシリアル化オブジェクトを使用すると、これを標準的かつ一貫した方法で実行できるため、ユーザーは手動でファイル操作を実行する必要がなくなります。

MFC には、クラス CObjectでのシリアル化の組み込みサポートが用意されています。 したがって、 CObject から派生したすべてのクラスは、 CObjectのシリアル化プロトコルを利用できます。

シリアル化の基本的な考え方は、オブジェクトが現在の状態 (通常はメンバー変数の値で示される) を永続ストレージに書き込める必要があるということです。 後で、ストレージからオブジェクトの状態を読み取るか、逆シリアル化することで、オブジェクトを再作成できます。 シリアル化では、オブジェクト ポインターのすべての詳細と、オブジェクトをシリアル化するときに使用されるオブジェクトへの循環参照が処理されます。 重要なポイントは、オブジェクト自体が独自の状態の読み取りと書き込みを担当することです。 したがって、クラスをシリアル化できるようにするには、基本的なシリアル化操作を実装する必要があります。 記事のシリアル化グループに示すように、この機能をクラスに簡単に追加できます。

MFC は、 CArchive クラスのオブジェクトを、シリアル化するオブジェクトとストレージ メディアの間の仲介役として使用します。 このオブジェクトは常に CFile オブジェクトに関連付けられます。そこから、ファイル名や要求された操作が読み取りまたは書き込みのいずれであるかなど、シリアル化に必要な情報が取得されます。 シリアル化操作を実行するオブジェクトは、ストレージ メディアの性質に関係なく、 CArchive オブジェクトを使用できます。

CArchive オブジェクトは、オーバーロードされた挿入 (<<) 演算子と抽出 (>>) 演算子を使用して、書き込みと読み取り操作を実行します。 詳細については、「シリアル化: オブジェクトのシリアル化」の「 アーカイブを使用した CObject の格納と読み込み 」を参照してください。

CArchive クラスと、書式設定されたテキストのみを対象とする汎用 iostream クラスを混同しないでください。 CArchive クラスは、バイナリ形式のシリアル化されたオブジェクト用です。

必要に応じて、MFC シリアル化をバイパスして、永続的なデータ ストレージ用の独自のメカニズムを作成できます。 ユーザーのコマンドでシリアル化を開始するクラス メンバー関数をオーバーライドする必要があります。 ID_FILE_OPEN、ID_FILE_SAVE、およびID_FILE_SAVE_AS標準コマンドの テクニカル ノート 22 の説明を参照してください。

次の記事では、シリアル化に必要な 2 つの主なタスクについて説明します。

シリアル化とデータベースの入出力に関する記事では、シリアル化がデータベース アプリケーションで適切な入出力手法である場合について説明します。

こちらも参照ください

概念
MFC の一般的なトピック
CArchive クラス
CObject クラス
CDocument クラス
CFile クラス