MFC/C++学习系列之简单记录——序列化机制

news/2024/12/23 15:34:38/

MFC/C++学习系列之简单记录——序列化机制

  • 前言
  • 简述六大机制
  • 序列化机制
  • 使用
  • 反序列化
  • 总结


前言

MFC有六大机制,分别是程序启动机制、窗口创建机制、动态创建机制、运行时类信息机制、消息映射机制、序列化机制。


简述六大机制

程序启动机制:全局的应用程序类对象——>AfxWinMain主函数——>应用程序对象的指针——>调用程序对象的有关函数——>初始化和启动

窗口创建机制:加载菜单——>CWnd::CreateEx函数创建窗口——>PreCreateWindow函数设计和注册窗口类——>AfxHookWindowCreate函数——>创建WH_CBT类型的钩子(将框架类对象保存到全局变量当前程序线程信息)——>CreateWindowEx函数创建窗口——>消息处理函数为AfxWndProc(框架类对象与窗口句柄进行绑定)

动态创建机制:派生自CObject——>声明DECLARE_DYNAMIC(theclass)——>实现宏IMPLEMENT_DYNAMIC(theclass,baseClass)。
动态创建机制允许在运行时根据类信息的结构动态地创建对象

运行时类信息机制:运行时类信息机制(RTTI)允许在运行时获取类的信息,如类名、大小、版本等。
添加声明DECLARE_DYNAMIC(theclass)或DECLARE_DYNCREATE(theclass),类外必须添加实现宏IMPLEMENT_DYNAMIC(theclass,baseClass)或IMPLEMENT_DYNCREATE(theclass,baseClass)。通过CRuntimeClass* CObject::GetRuntimeClass() const获取静态变量的地址,使用IsKindOf()函数来查找是否是括号中类的派生类。

消息映射机制:MFC程序中的消息映射机制允许将Windows消息、控制通知消息和命令消息映射到对应的处理函数,可以理解为窗口控件和后台事件绑定。消息映射表——>查询该表判断是否需要响应某条消息。

序列化机制:序列化操作将类对象的数据部分按照一定的规则进行二进制摆放,

序列化机制

以二进制流形式读写硬盘文件。序列化去硬盘写数据,反序列化去硬盘读数据。
CFile类:文件操作类
CArchive类:归档类,有关于内存数据的读写操作。

使用

CFile file;
file.Open("xxx",CFile::modeCreate|CFile::modeWrite);CArchive ar(&file,CArchive::store,4096);
float arr=86.5;
ar<<arr;//插入缓冲区
ar.Close();
file.Close();

这里就是将数据写入xxx文件内。也就是arr的86.5写入file这里的文件内。

反序列化

使用区别主要在设置中

CArchive ar(&file,CArchive::load,4096);

将store改成load,也就是加载。


总结

简单介绍了序列化代码的使用,将数据以序列化的形式写入文件!


http://www.ppmy.cn/news/1557499.html

相关文章

[创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论

目录 一、价值转移理论 1.1. 什么是价值&#xff1f; 1.2. 什么价值创造 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、影响价值创造的因素 &#xff08;3&#xff09;、价值创造的三个过程 &#xff08;4&#xff09;、价值创造的实践 &#xff08;5&…

15.初识接口1 C#

这是一个用于实验接口的代码 适合初认识接口的人 【CSDN开头介绍】&#xff08;文心一言AI生成&#xff09; 在C#编程世界中&#xff0c;接口&#xff08;Interface&#xff09;扮演着至关重要的角色&#xff0c;它定义了一组方法&#xff0c;但不提供这些方法的实现。它要求所…

THM:Skynet[WriteUP]

目录 连接至THM服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对137端口进行针对性扫描 使用enum4lin…

docker--压缩镜像和加载镜像

压缩指令 压缩单个镜像 docker save -o myapp_latest.tar image_name:tag 压缩多个镜像到同一个文件 docker save -o multiple_images.tar iamge1_name:tag1 image2_name:tag2 压缩选项 -o: 代表 "output"&#xff08;输出&#xff09;。当你想要将一个 Docker 镜…

linux 中文输入法设置的宏观思路 (****)

乱是永远的不乱,变是永远的不变。 $ ibus help # 注意:help 前没有杠符号 $ setxkbmap -help # 注意:help 前只有一个杠符号 $ localectl --help # 注意:help 前有 2 个杠符号 $ man im-config # 注意:-h, --help 只出来提示信息:请参考。。。。。。。 $ man abc…

打通全网SEO优化:提高百度、B站、抖音等平台搜索排名

SEO&#xff08;搜索引擎优化&#xff09;已经不仅仅局限于传统的搜索引擎&#xff0c;它涵盖了多个内容平台、电商平台、社交媒体等。要想在这些平台上获得更多的曝光&#xff0c;提升品牌知名度&#xff0c;获取精准流量&#xff0c;必须采用全网SEO优化策略。如何打通全网SE…

MySQL InnoDB 存储引擎 Redo Log(重做日志)详解

1 Redo Log 的作用与重要性 Redo Log 是 InnoDB 存储引擎中用于实现事务持久性和崩溃恢复的关键组件。它的主要功能是记录对数据库页&#xff08;page&#xff09;所做的物理修改&#xff0c;确保即使在系统崩溃的情况下&#xff0c;已经提交的事务也不会丢失&#xff0c;并且可…

AI的进阶之路:从机器学习到深度学习的演变(三)

&#xff08;承接上集&#xff1a;AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;二&#xff09;&#xff09; 四、深度学习&#xff08;DL&#xff09;&#xff1a;机器学习的革命性突破 深度学习&#xff08;DL&#xff09;作为机器学习的一个重要分支&am…