Mfc-serialization

提供:Dev Guides
移動先:案内検索

MFC-シリアル化

  • シリアル化*は、ディスクファイルなどの永続的なストレージメディアとの間でオブジェクトを読み書きするプロセスです。 シリアル化は、プログラムの実行中または実行後に構造化データ(C ++クラスや構造など)の状態を維持することが望ましい状況に最適です。

ファイル処理を実行する場合、値は通常、プリミティブ型(char、short、int、float、またはdouble)です。 同様に、一度に1つずつ、多くの値を個別に保存できます。 この手法には、クラスから(変数として)作成されたオブジェクトは含まれません。

MFCライブラリは、シリアル化を高度にサポートしています。 これは、Serialize()メンバー関数を備えたほとんどのMFCクラスの祖先であるCObjectクラスで始まります。

新しいMFCプロジェクトを作成して、簡単な例を見てみましょう。

  • ステップ1 *-TODO行を削除し、次のスナップショットに示すようにダイアログボックスを設計します。

TODO行の削除

  • ステップ2 *-すべての編集コントロールの値変数を追加します。 前述のEmp IDとAgeの場合、値の型は次のスナップショットに示すように整数です。

シリアル化変数の追加

  • ステップ3 *-両方のボタンにイベントハンドラーを追加します。
  • ステップ4 *-シリアル化する必要がある単純なEmployeeクラスを追加しましょう。 ヘッダーファイルのEmployeeクラスの宣言は次のとおりです。
class CEmployee : public CObject {
   public:
      int empID;
      CString empName;
      int age;
      CEmployee(void);
      ~CEmployee(void);
   private:

   public:
      void Serialize(CArchive& ar);
      DECLARE_SERIAL(CEmployee);
};

ステップ5 *-ソース( .cpp)ファイルのEmployeeクラスの定義です。

IMPLEMENT_SERIAL(CEmployee, CObject, 0)
CEmployee::CEmployee(void) {

}

CEmployee::~CEmployee(void) {

}

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

   if (ar.IsStoring())
      ar << empID << empName << age;
   else
      ar >> empID >> empName >> age;
}
  • ステップ6 *-保存ボタンイベントハンドラーの実装です。
void CMFCSerializationDlg::OnBnClickedButtonSave() {
  //TODO: Add your control notification handler code here
   UpdateData(TRUE);
   CEmployee employee;
   CFile file;
   file.Open(L"EmployeeInfo.hse", CFile::modeCreate | CFile::modeWrite);
   CArchive ar(&file, CArchive::store);
   employee.empID = m_id;
   employee.empName = m_strName;
   employee.age = m_age;
   employee.Serialize(ar);
   ar.Close();
}
  • ステップ7 *-Openボタンイベントハンドラーの実装です。
void CMFCSerializationDlg::OnBnClickedButtonOpen() {
  //TODO: Add your control notification handler code here
   UpdateData(TRUE);

   CFile file;

   file.Open(L"EmployeeInfo.hse", CFile::modeRead);
   CArchive ar(&file, CArchive::load);
   CEmployee employee;

   employee.Serialize(ar);

   m_id = employee.empID;
   m_strName = employee.empName;
   m_age = employee.age;
   ar.Close();
   file.Close();

   UpdateData(FALSE);
}
  • ステップ8 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。

シリアル化結果

  • ステップ9 *-すべてのフィールドに情報を入力し、[保存]をクリックしてこのプログラムを閉じます。

シリアル化挿入情報

  • ステップ10 *-データを保存します。 アプリケーションを再度実行し、開くをクリックします。 従業員情報をロードします。

シリアル化保存情報