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

DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC宏

DECLARE_DYNAMIC宏定义:

#ifdef _AFXDLL
#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; /

#define _DECLARE_DYNAMIC(class_name) /
protected: /
 static CRuntimeClass* PASCAL _GetBaseClass(); /
public: /
 static CRuntimeClass class##class_name; /
 static CRuntimeClass* PASCAL GetThisClass(); /
 virtual CRuntimeClass* GetRuntimeClass() const; /

#else
#define DECLARE_DYNAMIC(class_name) /
public: /
 static const CRuntimeClass class##class_name; /
 virtual CRuntimeClass* GetRuntimeClass() const; /

#define _DECLARE_DYNAMIC(class_name) /
public: /
 static CRuntimeClass class##class_name; /
 virtual CRuntimeClass* GetRuntimeClass() const; /

#endif

IMPLEMENT_DYNAMIC宏定义:

#define IMPLEMENT_DYNAMIC(class_name, base_class_name) /
 IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL, NULL)                                         

其中IMPLEMENT_RUNTIMECLASS宏定义为:

#ifdef _AFXDLL
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew, class_init) /
 CRuntimeClass* PASCAL class_name::_GetBaseClass() /
  { return RUNTIME_CLASS(base_class_name); } /
 AFX_COMDAT const CRuntimeClass class_name::class##class_name = { /
  #class_name, sizeof(class class_name), wSchema, pfnNew, /
   &class_name::_GetBaseClass, NULL, class_init }; /
 CRuntimeClass* PASCAL class_name::GetThisClass() /
  { return _RUNTIME_CLASS(class_name); } /
 CRuntimeClass* class_name::GetRuntimeClass() const /
  { return _RUNTIME_CLASS(class_name); } /

#else
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew, class_init) /
 AFX_COMDAT const CRuntimeClass class_name::class##class_name = { /
  #class_name, sizeof(class class_name), wSchema, pfnNew, /
   RUNTIME_CLASS(base_class_name), NULL, class_init }; /
 CRuntimeClass* class_name::GetRuntimeClass() const /
  { return RUNTIME_CLASS(class_name); } /

#endif

其中又导出下面几个宏:

#define _RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))

#ifdef _AFXDLL
#define RUNTIME_CLASS(class_name) (class_name::GetThisClass())
#else
#define RUNTIME_CLASS(class_name) _RUNTIME_CLASS(class_name)
#endif

 

http://www.xdnf.cn/news/11180.html

相关文章:

  • 【中科院1区】Matlab实现遗传算法GA-RF故障诊断算法研究
  • Android开发需要学什么,极致干货
  • 2024年7月最新界面:电脑注册Google账号的关键步骤、注意事项和常见问题(手机也适用)
  • lamp搭建
  • Libpcap使用总结
  • S1机器人评测报告
  • 限制对比度自适应直方图均衡化算法原理、实现及效果
  • Windows套接字错误代码说明
  • JasperException异常
  • 网络安全——缓冲区溢出攻击
  • @Scheduled定时任务单线程和多线程
  • 华为突遭谷歌釜底抽薪!官方安卓不再支持华为手机(2)
  • 快速使用Monkey测试工具的方法(1),2024年最新软件测试综合面试
  • PE安装系统保姆教程
  • [山东大学操作系统课程设计]实验六
  • Lifekeeper产品正版与盗版的区别
  • 数据库SQL入门教程基础知识
  • jsp的session介绍 (转)
  • 解决因找不到d3dx9_29.dll而无法运行程序的问题
  • 不兼容android5.1.1,为什么你的手机刷不上Android 5.1系统?需要具备哪些条件呢?...
  • 详解Oracle RAC入门和提高
  • 激光雷达运动畸变去除方法
  • Citrix VDI实战攻略之五:vDisk配置
  • CDN加速原理详解
  • 嵌入式TCP硬件设计--------LAN8720芯片使用记录
  • 开源web终端ssh解决方案-gateone简介
  • 创龙TMS320C6748开发板———EDMA简介及配置
  • 启动应用程序出现dxdiag.exe找不到问题解决
  • 路由器不能端口映射什么原因?如何设置内网映射?
  • 汇川触摸屏IT7000E和汇川中小型系列PLC连接及MW寄存器说明