用真正的MFC 宏集,根据类名字符串动态生成!DECLARE_xxx, IMPLEMENT_xxx
来源:互联网 发布:手机淘宝5.9.2旧版本 编辑:程序博客网 时间:2024/06/05 17:03
但凡读过侯老的关于MFC的书的人,没有人不晓得他对MFC RTTI机制细致入微的描述和模拟。
但那些macro(巨集)都是侯老为了描述问题方便,对真的 MFC 宏的拆解和重新组合。
那么用真正的MFC中定义的宏,如何动态生成。看我下面的程序吧。具体就不解释了,关心原理
人的都是看过侯老书的人,看过侯老书的人,自然知道原理。
(本程序在vc6 下测试通过。建立一个空白的win32程序,然后加入下面这一个程序文件就可以了。
别忘了在project setting中设置 use MFC in a static library 或 shared DLL。)
转载请注明出处
/*------------------ MFC dynamic creation ------------------
Author: dubiousway
Desc: a simulation of MFC dynamic creation,
using real macros defined in MFC:
DECLARE_xxx, IMPLEMENT_xxx
Date: 11.25.2010
----------------------------------------------------------*/
#include <stdio.h>
#include <afx.h>
class CMyClsA:public CObject{
public:
DECLARE_SERIAL(CMyClsA)
CMyClsA(){ printf("CMyClsA constructor!/n"); }
};
class CMyClsB:public CObject{
public:
DECLARE_SERIAL(CMyClsB)
CMyClsB(){ printf("CMyClsB constructor!/n"); }
};
class CMyClsAA:public CMyClsA{
public:
DECLARE_SERIAL(CMyClsAA)
CMyClsAA(){ printf("CMyClsAA constructor!/n"); }
};
IMPLEMENT_SERIAL(CMyClsA,CObject,1)
IMPLEMENT_SERIAL(CMyClsB,CObject,1)
IMPLEMENT_SERIAL(CMyClsAA,CMyClsA,1)
CObject* CreateFromName(char* className){
const CRuntimeClass* pClass;
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
for (pClass = pModuleState->m_classList; pClass != NULL;pClass = pClass->m_pNextClass)
if (lstrcmp(className, pClass->m_lpszClassName) == 0)
break;
return (pClass->m_pfnCreateObject)();
}
int main(){
CObject* pObj1= CreateFromName("CMyClsB");
CObject* pObj2= CreateFromName("CMyClsAA");
delete pObj1;
delete pObj2;
return 0;
}
- 用真正的MFC 宏集,根据类名字符串动态生成!DECLARE_xxx, IMPLEMENT_xxx
- 用真正的MFC 宏集,根据类名字符串动态生成!DECLARE_xxx, IMPLEMENT_xxx
- php根据字符串类名 动态生成对象
- 根据字符串类名动态创建对象
- 根据字符串类名动态创建对象
- 根据字符串类名动态创建对象
- C++实现根据类名动态生成类对象
- C++实现根据类名动态生成类对象
- 根据类名生成窗口
- ABAP根据输入的表名动态生成上传EXCEL数据的代码
- ABAP根据输入的表名动态生成上传TXT数据的代码
- python 根据类的字符串名实例化对象
- 函数名的“动态”生成
- 根据类名(字符串)创建类
- 根据类名字符串创建实例
- java根据字符串获取类名
- 根据类名字符串创建类名并且调用类里的方法
- 根据类名和函数名字符串调用相关函数
- LR中的options选项设置说明
- devexpress
- MFC 文件打开对话框
- 断点续传的原理
- Liunx/Unix scp命令详解
- 用真正的MFC 宏集,根据类名字符串动态生成!DECLARE_xxx, IMPLEMENT_xxx
- iPhone开发 在xcode4.2中sdk5.0 arc部分不开启
- SQLite 外键 级联更新 删除
- 一次循环实现插入中值位置
- Linux内存管理之高端内存映射 (2008-02-27 15:28)
- IOS Button title居中实现方法实例
- 监听EditView中的文本改变事件详解
- 关联规则在银行存取款业务中的 应用
- Eclipse的工作区设置眼睛保护色