MFC におけるシリアル化

この記事では、プログラムの実行間でオブジェクトを永続化できるようにするために Microsoft Foundation Class ライブラリ (MFC) に用意されているシリアル化機構について説明します。

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

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

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

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

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

Note

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

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

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

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

関連項目

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