Учебники

MFC — Сериализация

Сериализация — это процесс записи или чтения объекта на постоянный носитель, такой как файл на диске, или с него. Сериализация идеальна для ситуаций, когда желательно поддерживать состояние структурированных данных (таких как классы или структуры C ++) во время или после выполнения программы.

При выполнении обработки файлов значения обычно имеют примитивные типы (char, short, int, float или double). Таким же образом, мы можем индивидуально сохранить много значений, по одному за раз. Этот метод не включает в себя объект, созданный из (в качестве переменной) класса.

Библиотека MFC имеет высокий уровень поддержки сериализации. Он начинается с класса CObject, который является предком для большинства классов MFC, который оснащен функцией-членом Serialize ().

Давайте рассмотрим простой пример, создав новый проект MFC.

Шаг 1 — Удалите строку TODO и создайте диалоговое окно, как показано на следующем снимке.

Удалить TODO Line

Шаг 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 — Вот определение класса Employee в исходном (* .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;
}

Шаг 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 — Вот реализация обработчика события кнопки «Открыть».

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 — Это сохранит данные. Запустите приложение еще раз и нажмите кнопку Открыть. Он загрузит информацию о сотруднике.