博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【MFC】序列化(Serialize)、反序列化(Deserialize)
阅读量:6160 次
发布时间:2019-06-21

本文共 2202 字,大约阅读时间需要 7 分钟。

1、首先在头文件里面声明

DECLARE_SERIAL(CSelectionSerial)

2、重写CObject的Serialize函数

virtual void Serialize(CArchive& ar){   CObject::Serialize(ar);   //关键代码   if(ar.IsStoring())   {         //序列化         ar << this->xxx;    }   else    {         //反序列化         ar >>xxx;    }}

3、在类开始出定义

 IMPLEMENT_SERIAL(Person, CObject, VERSIONABLE_SCHEMA | 2)

下面给出一个列子:

1、序列化类.h文件

#pragma once// CSelectionSerial 命令目标class CSelectionSerial : public CObject{public:    DECLARE_SERIAL(CSelectionSerial) //必要内容    CSelectionSerial();    virtual ~CSelectionSerial();    //序列化重写    //参数ar,CArchive类型    virtual void Serialize(CArchive& ar); //必要内容    void SetCurrent(const int index);    int GetCurrent();    void SetFile(const CString file);     CString GetFile(); private:    int m_Current;    CString m_File;};

2、序列化类.cpp文件

// SelectionSerial.cpp : 实现文件//#include "stdafx.h"#include "SelectionSerial.h"// CSelectionSerialIMPLEMENT_SERIAL(CSelectionSerial,CObject,VERSIONABLE_SCHEMA | 2) //必要内容CSelectionSerial::CSelectionSerial(){}CSelectionSerial::~CSelectionSerial(){}// CSelectionSerial 成员函数void CSelectionSerial::Serialize(CArchive& ar) //必要内容{    CObject::Serialize(ar);    if(ar.IsStoring())    {        //序列化        ar<
m_File; ar<
m_Current; } else { //反序列化 ar>>this->m_File; ar>>this->m_Current; }}void CSelectionSerial::SetCurrent(int index){ m_Current=index;}int CSelectionSerial::GetCurrent(){ return m_Current;} void CSelectionSerial::SetFile(CString file){ m_File=file;}CString CSelectionSerial::GetFile(){ return m_File;}

3、序列化

void Serializable(CSelectionSerial* serial,CString filePath){    CFile file(filePath,CFile::modeCreate|CFile::modeWrite);    file.SeekToBegin();    ::CArchive arStore(&file,CArchive::store);    arStore.WriteObject(serial);    arStore.Flush();    arStore.Close();    file.Close();}

4、反序列化

CSelectionSerial* DeSerializable(CString filePath){    CFile file(filePath,CFile::modeRead);    file.SeekToBegin();    ::CArchive arLoad(&file,CArchive::load);    CSelectionSerial* serial = (CSelectionSerial*)arLoad.ReadObject(RUNTIME_CLASS(CSelectionSerial));    arLoad.Close();    file.Close();    return serial;}

 

转载地址:http://keafa.baihongyu.com/

你可能感兴趣的文章
跨线程更新控件UI
查看>>
Main函数参数argc,argv说明
查看>>
Debian 7 Wheezy 安装 VirtualBox
查看>>
SSMS 2005 连接 SQL SERVER 2008问题
查看>>
Android用户界面开发:控件集合
查看>>
RFID Cooking with Mifare Classic
查看>>
组策略妙用----通过组策略禁止域用户更改IP地址
查看>>
用oledb导出数据到excel
查看>>
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
查看>>
游戏运行时报0xc000007b错的解决办法
查看>>
如何实现一个HTML5 RPG游戏引擎——第五章,实现人物和人物特效
查看>>
Qt Installer Framework实战
查看>>
刑事案件的构成要素 zt
查看>>
NoSQL之【MongoDB】学习(二):DML和查询操作说明
查看>>
北漂工作心得
查看>>
给那些因为Firebug而舍不得FireFox的朋友
查看>>
JTree常用方法
查看>>
高质量视频学习网站
查看>>
百度地图定位SDK 之构想
查看>>
利用Windows 2003系统中实现两个网段的路由
查看>>