宏DECLARE_DYNCREATE与DECLARE_DYNAMIC

2023-11-12

一、作用

DECLARE_DYNCREATE的主要作用:

  1. 支持对象的动态创建: 使用 DECLARE_DYNCREATE 宏声明的类可以在运行时动态创建对象。

  2. 支持对象的序列化: MFC框架提供了对象的序列化支持,允许将对象的状态保存到磁盘(序列化为文件)或通过网络传输,然后重新加载对象状态

语法如下,在.h文件中声明该宏,必须在对应的cpp文件中使用IMPLEMENT_DYNAMIC宏

DECLARE_DYNCREATE(class_name )

 DECLARE_DYNAMIC:支持运行时类型识别(RTTI)

看源码可知,DECLARE_DYNCREATE包含了DECLARE_DYNAMIC宏,所以凡是支持动态创建的,一定支持RTTI。

二、DECLARE_DYNCREATE实例

class CMyObject : public CObject
{
    DECLARE_DYNCREATE(CMyObject)

public:
    CMyObject();  // 构造函数

    // 其他成员函数和属性

    // 声明对象的序列化函数
    virtual void Serialize(CArchive& ar);
};

三、DECLARE_DYNAMIC的源码

通过上面的解释:可以认为使用这个DECLARE_DYNCREATE(class_name)可以使每个CObject的对象在运行的时候具备动态创建的能力。MFC框架利用这种能力来创建对象,例如当它从磁盘读取一系列对象的时候,很多对象都需要动态的去创建。

DECLARE_DYNAMIC在afx.h中声明如下:

#define DECLARE_DYNCREATE(class_name) \
	DECLARE_DYNAMIC(class_name) \
	static CObject* PASCAL CreateObject();


#define DECLARE_DYNAMIC(class_name) \
protected: \
	static CRuntimeClass* PASCAL _GetBaseClass(); \
public: \
	static const CRuntimeClass class##class_name; \
	static CRuntimeClass* PASCAL GetThisClass(); \
	virtual CRuntimeClass* GetRuntimeClass() const; \ // 获取该类的类型为CRuntTimeClass的成员变量

 可以看出:主要是一个静态成员变量CRuntimeClass,一个虚函数GetRuntimeClass

参考:

https://www.cnblogs.com/htj10/p/11831404.html

DECLARE_DYNCREATE与DECLARE_DYNAMIC区别_51CTO博客_DECLARE_DYNCREATE

DECLARE_DYNCREATE(class_name)的具体作用_不修边幅的胖子的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

宏DECLARE_DYNCREATE与DECLARE_DYNAMIC 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 超实用的Mac风扇控制系统:Macs Fan Control Pro mac中文版

    Macs Fan Control Pro Mac中文激活版是专为mac用户开发的一款Mac风扇控制系统 用户可以监控电脑中的显卡温度 以及风扇等等 可以帮你解决mac风扇噪音问题 解决mac发热问题 而且支持自定义风扇转速策略设置 非常好用
  • 面试准备计划

    C 知识点 基本概念 关键字 函数底层实现 Linux 指令 makefile c make 数据库 SQL 基本语法 存储过程 触发器 事务 索引等底层实现 存储引擎 非关系型数据库redis mapreduce HDFS 操作系统 进程
  • 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建)

    前言 VueJS可以说是近些年来最火的前端框架之一 越来越多的网站开始使用vuejs作为前端框架 vuejs轻量 简单的特性使得前端开发变得更加简易 而基于vuejs的前端组件库也越来越多 我们今天使用的ElementUI 是饿了么团队开发
  • select下拉列表级联

    原文地址 http blog csdn net symgdwyh article details 5432582
  • Python学习(十)之数字(Number)、字符串(String)

    文章目录 一 Python3 数字 1 整型的不同进制 2 数据类型的转换 3 数字运算 4 数学函数 5 随机数函数 6 三角函数 7 数字常量 二 Python3 字符串 1 对字符串的访问 2 字符串运算符 3 转义字符 4 字符串格
  • GLP(Grafna +Loki +Promtail)日志可视化企业级实战

    文章目录 1 效果展示 Loki 指标展示 日志展示 内存分析案例 业务请求量分析统计 自由探索日志 0 简介 grafana学习 自定义查询按钮 为什么不是ELK ELK Loki 1 loki聚合组件 架构
  • phpstudy2016 RCE漏洞验证

    文章目录 漏洞描述 漏洞验证 漏洞描述 PHPStudyRCE Remote Code Execution 也称为phpstudy backdoor漏洞 是指PHPStudy软件中存在的一个远程代码执行漏洞 漏洞验证 打开phpstudy2
  • 小熊个人资料_抖音网红熊董事长个人资料,美迪智董事长张曼如信息介绍

    想必大家最近都被抖音上面一只勤勤恳恳发传单的熊给刷屏了吧 广州那么热的天别说女孩子穿着那么厚的衣服满街跑 就连男生也不行啊 毕竟那个衣服里面是不透气的 最开始大家是被这个网红熊的坚持感动到了 后来才知道发传单的只是一个20岁的女生 后来大家
  • Promise原理

    一 Promise与异步的关系 之前做练习遇到Promise与SetTimeout的混合使用 自己发现对于Promise的理解不够彻底 所以今天就来看看这方面的问题 首先Promise的主要作用是能够处理异步问题 那么什么是异步呢 与它相反
  • <li>标签获取选中的值

    ul class payType li class selected 支付宝付款 li li 货到付款 li ul window nl ad function 获取id为zhifubao下边所有li标签 var fukuan documen
  • 【k8s故障处理篇】kubernetes集群中工作节点Noready故障处理

    k8s故障处理篇 kubernetes集群中工作节点Noready故障处理 一 查看故障情况 二 检查master节点系统pod是否运行正常 三 在master节点检查node02节点详细信息 四 检查node02节点日志 五 最终解决方法
  • [Nowcoder

    题目描述 There s a new art installation in town and it inspires you to play a childish game The art installation consists of
  • QT给控件QLineEdit添加clicked()事件方法

    做Qt开发的会知道QLineEdit是默认没有clicked事件的 但是Qt有很好的一套信号 槽机制 而且Qt是基于C 面向对象的思想来设计的 那么我们就很容易通过自己定义一些类 重写QLineEdit的一些方法去实现没有的方法 比如cli
  • Python时间序列--ARIMA模型参数选择(六)

    ARIMA模型参数选择流程 import pandas as pd import numpy as np TSA from Statsmodels import statsmodels api as sm import statsmodel
  • 指针和数组笔试题解析【下篇】

    文章目录 6 指针笔试题 6 1 试题 1 6 2 试题 2 6 3 试题 3 6 4 试题 4 6 5 试题 5 6 6 试题 6 6 7 试题 7 6 8 试题 8 6 指针笔试题 6 1 试题 1 下面代码输出的结果是什么 int m
  • 数学建模国赛论文latex代码汇总

    目录 一 写在前面的话 二 latex环境安装和编辑器的选择 三 基础配置 写作环境 中文支持 页面设置 分级目录 四 数学公式 方程 矩阵编写与特殊符号的输入 五 三线表的输入 六 图片和参考文献的插入 七 最后附上完整配置代码 一 写在
  • Java的jdk安装教程:

    一 jdk安装流程 1 从官网下载jdk https www oracle com java technologies downloads 2 进入官网 3 选择需要的版本 4 下载后 双击安装 二 配置环境变量 1 桌面右键计算机点击属性
  • 利用Audacity软件分析ctf音频隐写

    分析音频得到摩斯电码 看波的宽度分辨长短音 比较细的就是短音 代表 比较粗的就是长音 代表 中间的间隔就是 得到摩斯电码
  • unity点击场景内物体进行交互

    提示 本文展示点击事件 另有其他自行研究 前言 一 原理 二 使用步骤 1 使用前提 2 使用脚本 总结 前言 很多情况下我们需要对场景内的物体进行交互 今天我们采用射线检测的方法进行点击 例如 点击场景内的Cube 进行开始旋转 提示 以
  • 宏DECLARE_DYNCREATE与DECLARE_DYNAMIC

    一 作用 DECLARE DYNCREATE的主要作用 支持对象的动态创建 使用 DECLARE DYNCREATE 宏声明的类可以在运行时动态创建对象 支持对象的序列化 MFC框架提供了对象的序列化支持 允许将对象的状态保存到磁盘 序列化