MFC - Serialisierung

Serializationist der Vorgang des Schreibens oder Lesens eines Objekts auf oder von einem dauerhaften Speichermedium wie einer Festplattendatei. Die Serialisierung ist ideal für Situationen, in denen der Status strukturierter Daten (z. B. C ++ - Klassen oder -Strukturen) während oder nach der Ausführung eines Programms beibehalten werden soll.

Bei der Dateiverarbeitung handelt es sich normalerweise um primitive Werte (char, short, int, float oder double). Auf die gleiche Weise können wir viele Werte einzeln speichern. Diese Technik enthält kein Objekt, das aus (als Variable) einer Klasse erstellt wurde.

Die MFC-Bibliothek bietet ein hohes Maß an Unterstützung für die Serialisierung. Es beginnt mit der CObject-Klasse, die der Vorfahr der meisten MFC-Klassen ist und mit einer Serialize () -Mitgliedsfunktion ausgestattet ist.

Schauen wir uns ein einfaches Beispiel an, indem wir ein neues MFC-Projekt erstellen.

Step 1 - Entfernen Sie die TODO-Zeile und gestalten Sie Ihr Dialogfeld wie im folgenden Schnappschuss gezeigt.

Step 2- Fügen Sie Wertvariablen für alle Bearbeitungssteuerelemente hinzu. Für Emp ID und Alter ist der Werttyp eine Ganzzahl, wie im folgenden Schnappschuss gezeigt.

Step 3 - Fügen Sie den Ereignishandler für beide Schaltflächen hinzu.

Step 4- Fügen wir nun eine einfache Employee-Klasse hinzu, die wir serialisieren müssen. Hier ist die Deklaration der Employee-Klasse in der Header-Datei.

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 - Hier ist die Definition der Employee-Klasse in der Quelldatei (* .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 - Hier ist die Implementierung des Ereignishandlers für die Schaltfläche Speichern.

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 - Hier ist die Implementierung des Open Button Event Handlers.

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 - Wenn der obige Code kompiliert und ausgeführt wird, wird die folgende Ausgabe angezeigt.

Step 9 - Geben Sie die Informationen in alle Felder ein und klicken Sie auf Speichern und schließen Sie dieses Programm.

Step 10- Es werden die Daten gespeichert. Führen Sie die Anwendung erneut aus und klicken Sie auf Öffnen. Es werden die Mitarbeiterinformationen geladen.