首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

_GetBaseClass()与直接用RUNTIME_CLASS(base_class_name)的区别,该如何处理

2012-03-09 
_GetBaseClass()与直接用RUNTIME_CLASS(base_class_name)的区别MFC中的宏经过整理与删减与问题无关的代码

_GetBaseClass()与直接用RUNTIME_CLASS(base_class_name)的区别
MFC中的宏经过整理与删减与问题无关的代码如下:
#ifdef _AFXDLL //动态链接到MFC DLL
#define DECLARE_DYNAMIC(class_name) \
protected: \
static CRuntimeClass* PASCAL _GetBaseClass();\
public: \
static const AFX_DATA CRuntimeClass class##class_name; \
virtual CRuntimeClass* GetRuntimeClass() const; \

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

#endif


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

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

#endif

我想问的问题是:
对于_GetBaseClass(){ return RUNTIME_CLASS(base_class_name); },它是直接返回基类类信息,
为什么动态链接到MFC DLL的宏要用_GetBaseClass()函数去获得基类的类信息,而在else分支是直接用RUNTIME_CLASS(base_class_name),两者有什么本质区别?

[解决办法]
帮顶吧
[解决办法]
怎么没别的高手来啊,那我只有抛砖引诱了,首先对于静态链接的东西来说,直接用了RUNTIME_CLASS宏来达成动态创建对象的目的, 而对于使用MFC DLL的工程 使用_GetBaseClass(),我猜想 _GetBaseClass()除了做RUNTIME_CLASS宏的任务外,还需要做更多,比如如load 对应的DLL之类的琐碎事情。
[解决办法]
看看这个帖子


http://topic.csdn.net/u/20080525/07/0f106e1f-59e0-4590-8299-db4653485b4b.html

是和你说的一个问题

热点排行