当前位置: 首页 > news >正文

MFC 创建可序列化的对象 Serialize用法

Person.h


class CPerson : public CObject  
{  
    DECLARE_SERIAL(CPerson)  //---第一步,定义宏
public:  
    CPerson(void);  //第二步,定义无参构造函数
    CPerson(CString name, int age, bool gender = true);  //第三,带参数的构造函数
      
    virtual void Serialize(CArchive& ar);  //第四步,重写序列化函数
    virtual ~CPerson(void); 


CString m_name;  
    int     m_age;  
    bool    m_gender;  
private:  
   
    CString m_words;  
};  



Person.Cpp


#include "StdAfx.h"
#include "CPerson.h"


CPerson::CPerson(void)  
{  
    m_name = _T("hi");  
    m_age = 0;  
    m_gender = true;  
}


CPerson::CPerson(CString name, int age, bool gender)  
{  
    m_name = name;  
    m_age = age;  
    m_gender = gender;  
}  


void CPerson::Serialize(CArchive& ar)  
{  
    if (ar.IsStoring())  
    {  
        ar << this->m_name << this->m_age << this->m_gender << this->m_words;  
    }  
    else  
    {  
        ar >> this->m_name >> this->m_age >> this->m_gender >> this->m_words;  
    }  
}  
CPerson::~CPerson(void)  
{  
}  
IMPLEMENT_SERIAL(CPerson, CObject, 1)  //第五步,实现宏


使用的时候:


void CAboutDlg::OnBnClickedSer()
{
CFile file(_T("D:/persons.archive"), CFile::modeCreate | CFile::modeWrite);  
    CArchive ar(&file, CArchive::store);  
CPerson p(_T("aaa"),1,true);
// TODO: add storing code here
ar<<&p;
ar.Close();  
    file.Close();  


// TODO: add loading code here

// TODO: Add your control notification handler code here
//OnOK();
}


void CAboutDlg::OnBnClickedDeser()
{
CFile Rfile(_T("D:/persons.archive"), CFile::modeRead);  
    CArchive Rar(&Rfile, CArchive::load);  
    CPerson* p1;
    //序列化出来  
    Rar >> p1 ;  


AfxMessageBox(p1->m_name);
// TODO: Add your control notification handler code here
}


相关文章:

  • 《面向对象方法与技术》课欢迎业界朋友旁听交流
  • MFC 查找字符串函数的实现
  • 得到某年某月有多少天
  • MFC 显示位图
  • C++ 字符串 处理 消除多余空格
  • Ruby on Rails开发带二级域名业务的应用
  • 巨猛的网络!万能查询!(想查安全期?)
  • MFC 属性页 总结
  • MFC CStdioFile简单用法
  • MFC 表格控件的使用
  • [Web开发] xenocode 推出浏览器沙盘,无需安装直接运行各种浏览器
  • wireShark 的使用 网络抓包
  • MFC TRACE宏的使用
  • 关系数据库的死期到了?
  • vbScript 中on error resume next使用心得
  • 5、React组件事件详解
  • happypack两次报错的问题
  • HashMap ConcurrentHashMap
  • JavaScript设计模式与开发实践系列之策略模式
  • jQuery(一)
  • Linux Process Manage
  • Linux各目录及每个目录的详细介绍
  • Spring-boot 启动时碰到的错误
  • tab.js分享及浏览器兼容性问题汇总
  • Terraform入门 - 1. 安装Terraform
  • Vue2.0 实现互斥
  • Yeoman_Bower_Grunt
  • 测试如何在敏捷团队中工作?
  • 排序算法学习笔记
  • 使用API自动生成工具优化前端工作流
  • 学习Vue.js的五个小例子
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​第20课 在Android Native开发中加入新的C++类
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (4)Elastix图像配准:3D图像
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (定时器/计数器)中断系统(详解与使用)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (区间dp) (经典例题) 石子合并
  • (一)Linux+Windows下安装ffmpeg
  • (一)WLAN定义和基本架构转
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)Scala的“=”符号简介
  • ***通过什么方式***网吧
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET 8.0 发布到 IIS
  • .Net Web窗口页属性
  • .net 托管代码与非托管代码
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net对接阿里云CSB服务
  • @Bean, @Component, @Configuration简析
  • @JsonFormat与@DateTimeFormat注解的使用