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) 中常用的函数或概念。它用于将对象的数据进行序列化和反序列化,便于在不同的场景中保存、传输和恢复对象的状态。 在 MFC 中,Serialize 函数…...
GC 深入(小白,对gc有一个进一步的了解)
垃圾回收器的搭配 一般固定 一般这年轻代垃圾回收器,老年代垃圾回收器,如上图搭配着使用 1.8呢默认就是最后边那哥俩 jvm调优 一个就是增加吞吐量 一个就是减少STW的时间。 三色标记算法(理解根可达算法) 并发的可达性分析 有…...
CSS前端面试
文章目录 rem、em、vh、px各自代表的含义?盒模型poison 定位属性flex属性让元素水平垂直居中页面适配的方法有哪些 rem、em、vh、px各自代表的含义? px:绝对单位,页面按精确像素展示 em:相对单位,基准点为…...
VB+SQL餐饮管理系统设计与实现
第一章 前言 1.1 绪论 当今世界已进入了在计算机信息管理领域中激烈竞争的时代,应用计算机已经变得十分普遍了,如同我们离不开的自行车、汽车一样。我们应该承认,谁掌握的知识多,信息量大,信息处理速度快,批量大,谁的效率就高,谁就能够在各种竞争中立于不败之地。随着…...
React入门学习笔记2
jsx语法规则 定义虚拟DOM时,不要写引号。标签中混入JS表达式时要用{ }。样式的类名指定不要用class,要用className。内联样式,要用style{{key:value}}的形式去写。只有一个根标签标签必须闭合标签首字母 )若小写字母开头…...
Palo Alto Networks® PA-220R 下一代防火墙 确保恶劣工况下的网络安全
一、主要安全功能 1、每时每刻在各端口对全部应用进行分类 • 将 App-ID 用于工业协议和应用,例如 Modbus、 DNP3、IEC 60870-5-104、Siemens S7、OSIsoft PI 等。 • 不论采用何种端口、SSL/SSH 加密或者其他规避技术,都会识别应用。 • 使用…...
架构训练营学习笔记:5-2 负载均衡架构
多级负载架构 设计关键点 性能需求、维护复杂度之间做取舍。 一可以去掉F5、LVS : F5 是成本较高,LVS 是复杂,对于性能没那么高需求,可以去掉。 二 去掉ng: 服务网关服务 适应于初创公司快速验证,内部的 小系统…...
二叉树的性质、前中后序遍历【详细】
1. 树概念2.二叉树的概念1.2二叉树的性质 3.二叉树遍历3.2前序遍历3.2 中序遍历3.3 后序遍历 1. 树概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合,有二叉树,N叉树等等。 子树…...
涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现࿰…...
单片机中断系统
单片机中断系统 中断的概念: CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事…...
二、JVM-深入运行时数据区
深入运行时数据区 计算机体系结构 JVM的设计实际上遵循了遵循冯诺依曼计算机结构 CPU与内存交互图: 硬件一致性协议: 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的模块有很多,并且各有优劣,不同模块支持的操作和文件类型也有不同。下面是各个模块的支持情况: .xls.xlsx获取文件内容写入数据修改文件内容保存样式调整插入图片xlrd√√√xlwt√√√√√xlutils√√√√xlwings√√√√√…...
A Survey of Embodied AI: From Simulators to Research Tasks 论文阅读
论文信息: 题目:A Survey of Embodied AI: From Simulators to Research Tasks 作者:Jiafei Duan, Samson Yu 来源:arXiv 时间:2022 Abstract 通过评估当前的九个具体人工智能模拟器与我们提出的七个功能࿰…...
spark-sql数据重复之File Output Committer问题
前言 我们先来回顾下之前介绍过的三种Committer:FileOutputCommitter V1、FileOutputCommitter V2、S3A Committer,其基本代表了整体的演进趋势。 核心代码讲解详细参照:Spark CommitCoordinator 保证数据一致性 OutputCommitter commitTask…...
面试热题(前中序遍历构建树)
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 题目中是给定两个数组,一个是存放这颗树的前序遍历的数组,一个是存放这棵树的…...
美术:贴图
游戏模型制作流程,SP和BP根据情况来选择软件对UV进行处理 3Dmax 制作模型和动画(橘肉)RizomUV 对模型进行展UV(橘皮)Substance Painter 纹理手绘(给橘皮制定想要的皮肤)BodyPaint 3D 纹理手绘&a…...
[MAUI]模仿微信“按住-说话”的交互实现
今天使用这个控件,做一个模仿微信“按住-说话”的小功能,最终效果如下: 使用.NET MAUI实现跨平台支持,本项目可运行于Android、iOS平台。 创建页面布局 新建.NET MAUI项目,命名HoldAndSpeak MainPage.xaml中创建一个…...
windows开机运行jar
windows开机自启动jar包: 一、保存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,使用dcokerfile文件构建镜像,参考如下文件 # 使用ubuntu:20.04镜像作为基础 FROM ubuntu:20.04# 调整时区 ENV DEBIAN_FRONTENDnoninteractive TZAsia/Shanghai# build参数 ARG userxiang usergroupduo# 设置默认工作路径 WORKDIR /home/${user}# 拷贝…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) 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
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
