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

26 MFC序列化函数

文章目录

  • Serialize
  • 对于存储文件的序列化

Serialize

Serialize 是一个在 MFC (Microsoft Foundation Classes) 中常用的函数或概念。它用于将对象的数据进行序列化和反序列化,便于在不同的场景中保存、传输和恢复对象的状态。

在 MFC 中,Serialize 函数通常是在派生自 CObject 的类中实现的。通过重写 Serialize 函数,可以定义如何将对象的数据转换成二进制格式(序列化),以及如何将二进制数据还原为对象的状态(反序列化)。

  • 以下是一个基本示例:
void CMyObject::Serialize(CArchive& ar)
{if (ar.IsStoring()){// 将对象的数据写入存档ar << m_member1;ar << m_member2;// ...}else{// 从存档中读取数据并恢复对象的状态ar >> m_member1;ar >> m_member2;// ...}
}

在上述示例中,如果 CArchive 的存储模式为存储(IsStoring 返回 true),则将对象的数据写入存档;否则,在加载模式下(IsStoring 返回 false),从存档中读取数据并恢复对象的状态。
通过使用 Serialize 函数,您可以方便地将对象的状态保存到磁盘文件、数据库或网络流中,以及从这些介质中恢复对象的状态。

对于存储文件的序列化

CModeItem.h

class CModeItem :public CObject
{//添加序列号功能DECLARE_SERIAL(CModeItem)
public:CModeItem();~CModeItem();//序列号函数void Serialize(CArchive& ar);CString m_sModeName;//姓名int m_nAge;//年龄CString m_sSex;//性别int m_nSize;//用来存储指针的大小
};//CTypedPtrArray 是 MFC  中的一个模板类,用于存储指针的动态数组。
//CObArray 是 MFC 中的另一个类,它是一个基于指针的对象数组,可以用来存储任意类型的指针
typedef CTypedPtrArray <CObArray, CModeItem*> CModeItems;

CModeItem.cpp

#include "pch.h"
#include "CModeItem.h"
IMPLEMENT_SERIAL(CModeItem, CObject, 1 )
//IMPLEMENT_SERIAL 是一个在 MFC 中使用的宏,用于简化类的序列化实现。
//IMPLEMENT_SERIAL 宏用于在派生自 CObject 的类中实现对象的序列化。
//通过使用该宏,您可以自动生成 Serialize 函数的实现代码,而无需手动编写。
//IMPLEMENT_SERIAL(class_name, base_class_name, schema_version)//class_name:要实现序列化的类的名称。//base_class_name:基类(通常为 CObject)的名称。//schema_version:序列化模式的版本号,用于支持向后兼容性。CModeItem::CModeItem()
{m_sModeName = _T("");m_nAge = 0;m_sSex = _T("");m_nSize = sizeof(CModeItem);}CModeItem::~CModeItem()
{
}void CModeItem::Serialize(CArchive & ar)
{UINT uVer = 1;CString sTag = _T("");//用来存储更多的标志,便于扩展//CArchive::IsLoading或CArchiv::IsStoreing来确定存档是正在加载还是正在存储。//Serialize由CArchive ::ReadObject和CArchive::WriteObject调用。//这些函数与C存档插入运算符( << )和提取运算符( >> )相关联。if (ar.IsLoading)//正在加载{ar >> uVer >> m_sModeName >> m_nAge >> m_sSex;//提起}else{ar << uVer << m_sModeName << m_nAge << m_sSex;//插入}
}

theApp.h
在这里插入图片描述theApp.cpp

int CSerializeDemoApp::InitData()
{TCHAR exeFullPath[MAX_PATH];GetModuleFileName(NULL, exeFullPath, MAX_PATH);m_sRunPath = exeFullPath;  //当前运行路径SetCurrentDirectory(m_sRunPath);int iFind = m_sRunPath.ReverseFind('\\');if (-1 != iFind){m_sRunPath = m_sRunPath.Left(iFind);CreateDirectory(m_sRunPath + _T("\\Log"), NULL);CreateDirectory(m_sRunPath + _T("\\sys"), NULL);CreateDirectory(m_sRunPath + _T("\\DATA"), NULL);}//lpszSection:要读取的配置文件的节(section)名称。//lpszEntry:要读取的配置文件中的条目(entry)名称。//nDefault:如果无法找到指定的配置文件或条目,则返回的默认值。m_nCurMode= GetProfileInt(_T("学生信息"), _T("当前学生"), 0);LoadMode();return 0;
}int CSerializeDemoApp::LoadMode(void)
{RemoveAllMode();CString sFile = m_sRunPath + _T("\\sys\\mode.student");CFile oFile;if (oFile.Open(sFile, CFile::modeRead)){CString sClass,nID;//以后可能要扩展的CArchive ar(&oFile, CArchive::load);try {m_oModes.Serialize(ar);}catch (...){}ar.Close();oFile.Close();}return 0;
}int CSerializeDemoApp::RemoveAllMode(void)
{for (int n = m_oModes.GetSize() - 1; n >= 0; --n){delete m_oModes[n];}m_oModes.RemoveAll();return 0;
}int CSerializeDemoApp::SaveMode(void)
{CString sFile = m_sRunPath + _T("\\sys\\mode.student");CFile oFile;if (oFile.Open(sFile, CFile::modeWrite | CFile::modeCreate)){CString sClass, nID;//以后可能要扩展的CArchive ar(&oFile, CArchive::store);try {m_oModes.Serialize(ar);}catch (...){}ar.Close();oFile.Close();}return 0;
}

相关文章:

26 MFC序列化函数

文章目录 Serialize对于存储文件的序列化 Serialize Serialize 是一个在 MFC (Microsoft Foundation Classes) 中常用的函数或概念。它用于将对象的数据进行序列化和反序列化&#xff0c;便于在不同的场景中保存、传输和恢复对象的状态。 在 MFC 中&#xff0c;Serialize 函数…...

GC 深入(小白,对gc有一个进一步的了解)

垃圾回收器的搭配 一般固定 一般这年轻代垃圾回收器&#xff0c;老年代垃圾回收器&#xff0c;如上图搭配着使用 1.8呢默认就是最后边那哥俩 jvm调优 一个就是增加吞吐量 一个就是减少STW的时间。 三色标记算法&#xff08;理解根可达算法&#xff09; 并发的可达性分析 有…...

CSS前端面试

文章目录 rem、em、vh、px各自代表的含义&#xff1f;盒模型poison 定位属性flex属性让元素水平垂直居中页面适配的方法有哪些 rem、em、vh、px各自代表的含义&#xff1f; px&#xff1a;绝对单位&#xff0c;页面按精确像素展示 em&#xff1a;相对单位&#xff0c;基准点为…...

VB+SQL餐饮管理系统设计与实现

第一章 前言 1.1 绪论 当今世界已进入了在计算机信息管理领域中激烈竞争的时代,应用计算机已经变得十分普遍了,如同我们离不开的自行车、汽车一样。我们应该承认,谁掌握的知识多,信息量大,信息处理速度快,批量大,谁的效率就高,谁就能够在各种竞争中立于不败之地。随着…...

React入门学习笔记2

jsx语法规则 定义虚拟DOM时&#xff0c;不要写引号。标签中混入JS表达式时要用{ }。样式的类名指定不要用class&#xff0c;要用className。内联样式&#xff0c;要用style{{key&#xff1a;value}}的形式去写。只有一个根标签标签必须闭合标签首字母 )若小写字母开头&#xf…...

Palo Alto Networks® PA-220R 下一代防火墙 确保恶劣工况下的网络安全

一、主要安全功能 1、每时每刻在各端口对全部应用进行分类 • 将 App-ID 用于工业协议和应用&#xff0c;例如 Modbus、 DNP3、IEC 60870-5-104、Siemens S7、OSIsoft PI 等。 • 不论采用何种端口、SSL/SSH 加密或者其他规避技术&#xff0c;都会识别应用。 • 使用…...

架构训练营学习笔记:5-2 负载均衡架构

多级负载架构 设计关键点 性能需求、维护复杂度之间做取舍。 一可以去掉F5、LVS &#xff1a; F5 是成本较高&#xff0c;LVS 是复杂&#xff0c;对于性能没那么高需求&#xff0c;可以去掉。 二 去掉ng: 服务网关服务 适应于初创公司快速验证&#xff0c;内部的 小系统…...

二叉树的性质、前中后序遍历【详细】

1. 树概念2.二叉树的概念1.2二叉树的性质 3.二叉树遍历3.2前序遍历3.2 中序遍历3.3 后序遍历 1. 树概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合&#xff0c;有二叉树&#xff0c;N叉树等等。 子树…...

涨姿势了,有意思的气泡 Loading 效果

今日&#xff0c;群友提问&#xff0c;如何实现这么一个 Loading 效果&#xff1a; 这个确实有点意思&#xff0c;但是这是 CSS 能够完成的&#xff1f; 没错&#xff0c;这个效果中的核心气泡效果&#xff0c;其实借助 CSS 中的滤镜&#xff0c;能够比较轻松的实现&#xff0…...

单片机中断系统

单片机中断系统 中断的概念&#xff1a; CPU在处理某一事件A时&#xff0c;发生了另一事件B请求CPU迅速去处理&#xff08;中断发生&#xff09;&#xff1b;CPU暂时中断当前的工作&#xff0c;转去处理事件B&#xff08;中断响应和中断服务&#xff09;&#xff1b;待CPU将事…...

二、JVM-深入运行时数据区

深入运行时数据区 计算机体系结构 JVM的设计实际上遵循了遵循冯诺依曼计算机结构 CPU与内存交互图&#xff1a; 硬件一致性协议&#xff1a; MSI、MESI、MOSI、Synapse、Firely、DragonProtocol 摩尔定律 摩尔定律是由英特尔(Intel)创始人之一戈登摩尔(Gordon Moore)提出来…...

随机验证码vue实现,登录验证码随机验证码数字和字母类型的

1、组件 <!--loginCode登录验证码组件--> <template> <canvas id"canvasCode" :width"contentWidth" :height"contentHeight" /> </template> <script> export default { name: LoginCode, props: { identif…...

xlrd与xlwt操作Excel文件详解

Python操作Excel的模块有很多&#xff0c;并且各有优劣&#xff0c;不同模块支持的操作和文件类型也有不同。下面是各个模块的支持情况&#xff1a; .xls.xlsx获取文件内容写入数据修改文件内容保存样式调整插入图片xlrd√√√xlwt√√√√√xlutils√√√√xlwings√√√√√…...

A Survey of Embodied AI: From Simulators to Research Tasks 论文阅读

论文信息&#xff1a; 题目&#xff1a;A Survey of Embodied AI: From Simulators to Research Tasks 作者&#xff1a;Jiafei Duan, Samson Yu 来源&#xff1a;arXiv 时间&#xff1a;2022 Abstract 通过评估当前的九个具体人工智能模拟器与我们提出的七个功能&#xff0…...

spark-sql数据重复之File Output Committer问题

前言 我们先来回顾下之前介绍过的三种Committer&#xff1a;FileOutputCommitter V1、FileOutputCommitter V2、S3A Committer&#xff0c;其基本代表了整体的演进趋势。 核心代码讲解详细参照&#xff1a;Spark CommitCoordinator 保证数据一致性 OutputCommitter commitTask…...

面试热题(前中序遍历构建树)

给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 题目中是给定两个数组&#xff0c;一个是存放这颗树的前序遍历的数组&#xff0c;一个是存放这棵树的…...

美术:贴图

游戏模型制作流程&#xff0c;SP和BP根据情况来选择软件对UV进行处理 3Dmax 制作模型和动画&#xff08;橘肉&#xff09;RizomUV 对模型进行展UV&#xff08;橘皮&#xff09;Substance Painter 纹理手绘&#xff08;给橘皮制定想要的皮肤&#xff09;BodyPaint 3D 纹理手绘&a…...

[MAUI]模仿微信“按住-说话”的交互实现

今天使用这个控件&#xff0c;做一个模仿微信“按住-说话”的小功能&#xff0c;最终效果如下&#xff1a; 使用.NET MAUI实现跨平台支持&#xff0c;本项目可运行于Android、iOS平台。 创建页面布局 新建.NET MAUI项目&#xff0c;命名HoldAndSpeak MainPage.xaml中创建一个…...

windows开机运行jar

windows开机自启动jar包&#xff1a; 一、保存bat批处理文件 echo off %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit java -jar E:\projects\ruoyi-admin.jar > E:\server.log 2>&1 &…...

使用DockerFile一键创建自定义linux开发环境

1&#xff0c;使用dcokerfile文件构建镜像&#xff0c;参考如下文件 # 使用ubuntu:20.04镜像作为基础 FROM ubuntu:20.04# 调整时区 ENV DEBIAN_FRONTENDnoninteractive TZAsia/Shanghai# build参数 ARG userxiang usergroupduo# 设置默认工作路径 WORKDIR /home/${user}# 拷贝…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...