MFC - Serialisasi

Serializationadalah proses menulis atau membaca objek ke atau dari media penyimpanan persisten seperti file disk. Serialisasi sangat ideal untuk situasi yang diinginkan untuk mempertahankan status data terstruktur (seperti kelas atau struktur C ++) selama atau setelah eksekusi program.

Saat melakukan pemrosesan file, nilainya biasanya berjenis primitif (char, short, int, float, atau double). Dengan cara yang sama, kita dapat menyimpan banyak nilai secara individual, satu per satu. Teknik ini tidak menyertakan objek yang dibuat dari (sebagai variabel) kelas.

Pustaka MFC memiliki dukungan tingkat tinggi untuk serialisasi. Ini dimulai dengan kelas CObject yang merupakan leluhur dari sebagian besar kelas MFC, yang dilengkapi dengan fungsi anggota Serialize ().

Mari kita lihat contoh sederhana dengan membuat proyek MFC baru.

Step 1 - Hapus baris TODO dan desain kotak dialog Anda seperti yang ditunjukkan pada gambar berikut.

Step 2- Tambahkan variabel nilai untuk semua kontrol edit. Untuk Emp ID dan Age yang disebutkan, tipe nilainya adalah integer seperti yang ditunjukkan pada snapshot berikut.

Step 3 - Tambahkan event handler untuk kedua tombol.

Step 4- Sekarang mari kita tambahkan kelas Karyawan sederhana, yang perlu kita buat berseri. Berikut adalah deklarasi kelas Karyawan di file header.

class CEmployee : public CObject {
   public:
      int empID;
      CString empName;
      int age;
      CEmployee(void);
      ~CEmployee(void);
   private:

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

Step 5 - Berikut definisi kelas Karyawan dalam file source (* .cpp).

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;
}

Step 6 - Berikut adalah implementasi event handler tombol Simpan.

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();
}

Step 7 - Berikut adalah implementasi event handler tombol 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);
}

Step 8 - Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut.

Step 9 - Masukkan info di semua bidang dan klik Simpan dan tutup program ini.

Step 10- Ini akan menghemat data. Jalankan aplikasi lagi dan klik buka. Ini akan memuat informasi Karyawan.