MFC-직렬화

Serialization디스크 파일과 같은 영구 저장 매체에서 개체를 쓰거나 읽는 프로세스입니다. 직렬화는 프로그램 실행 중 또는 실행 후에 구조화 된 데이터 (예 : C ++ 클래스 또는 구조)의 상태를 유지하려는 상황에 이상적입니다.

파일 처리를 수행 할 때 값은 일반적으로 기본 유형 (char, short, int, float 또는 double)입니다. 같은 방식으로 한 번에 하나씩 여러 값을 개별적으로 저장할 수 있습니다. 이 기술은 클래스에서 (변수로) 생성 된 객체를 포함하지 않습니다.

MFC 라이브러리는 직렬화에 대한 높은 수준의 지원을 제공합니다. Serialize () 멤버 함수가 장착 된 대부분의 MFC 클래스의 조상 인 CObject 클래스로 시작합니다.

새 MFC 프로젝트를 만들어 간단한 예를 살펴 보겠습니다.

Step 1 − TODO 라인을 제거하고 다음 스냅 샷과 같이 대화 상자를 디자인합니다.

Step 2− 모든 편집 컨트롤에 대한 값 변수를 추가합니다. 언급 된 Emp ID 및 Age의 경우 값 유형은 다음 스냅 샷에 표시된대로 정수입니다.

Step 3 − 두 버튼에 대한 이벤트 핸들러를 추가합니다.

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

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

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

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

Step 8 − 위 코드를 컴파일하여 실행하면 다음과 같은 출력이 나타납니다.

Step 9 − 모든 필드에 정보를 입력하고 저장을 클릭하고이 프로그램을 닫습니다.

Step 10− 데이터를 저장합니다. 응용 프로그램을 다시 실행하고 열기를 클릭합니다. 직원 정보를로드합니다.