| 查看: 824 | 回复: 1 | ||
| 【奖励】 本帖被评价1次,作者yuancongsen增加金币 0.6 个 | ||
[资源]
【讨论】AFX_CLASSINIT真正的定义
|
||
|
AFX_CLASSINIT真正的定义 这是《深入浅出MFC》里面的定义,但是看看源代码。 struct AFX_CLASSINIT { AFX_CLASSINIT(CRuntimeClass *pNewClass); }; AFX_CLASSINIT :: AFX_CLASSINIT(CRuntimeClass *pNewClass) { pNewClass->m_pNextClass = CRuntimeClass :: pFirstClass; CRuntimeClass :: pFirstClass = pNewClass; } 完成CRuntimeClass LinkList 链接 真的是这个样?分析过MFC源代码?如果看看源代码,提点问题便不会这个样子了,下面看真正的定义 struct AFX_CLASSINIT { AFX_CLASSINIT(CRuntimeClass* pNewClass) { AfxClassInit(pNewClass); } }; 可见这里是调用AfxClassInit(pNewClass)这个函数来初始化的,这个函数的定义: void AFXAPI AfxClassInit(CRuntimeClass* pNewClass) { AFX_MODULE_STATE* pModuleState = AfxGetModuleState(); AfxLockGlobals(CRIT_RUNTIMECLASSLIST); pModuleState->m_classList.AddHead(pNewClass); AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST); } MFC中CRunTimeClass疑问 2010年04月07日 星期三 上午 07:48 1.CRunTimeClass结构实际上组成了2种链表,一种是按照创建顺序组成的链表;另一种是基类同其派生类之间的所谓的”同宗“链(P109中的IsKindOf中),上例的同宗链应该如下所示: ccmdtarget<--cwinthread<---cwinapp 2.关系的建立在IMPLEMENT_DYNAMIC宏中。P98-99源码如下: #define IMPLEMENT_DYNAMIC(class_name,base_class_name) _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL) #define _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,wSchema,pfnNew) static char _lpsz##class_name[]=#class_name; CRuntimeClass class_name::class##class_name={ _lpsz##class_name,sizeof(class_name),wSchema,pfnNew, RUNTIME_CLASS(base_class_name),NULL}; static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name); CRuntimeClass* class_name::GetRuntimeClass() const {return &class_name::class##class_name;} ... #define RUNTIME_CLASS(class_name) (&class_name::clas##class_name) 上述源码中_IMPLEMENT_RUNTIMECLASS宏定义的第三行就是给class_name类的CRuntimeClass数据成员赋值,根据变量和常量的对应关系,可以看到其中 m_pBaseClass的值为 RUNTIME_CLASS(base_class_name)------它的结果就是base_class_name类中CRuntimeClass成员的指针,从而使派生类的CRuntimeClass成员指向其基类的CRuntimeClass成员的地址,建立”同宗“链。 |
» 猜你喜欢
请问有评职称,把科研教学业绩算分排序的高校吗
已经有6人回复
2025冷门绝学什么时候出结果
已经有6人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有7人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有8人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有5人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
英文SCI科技论文的定义、结构及撰写要点(香港大学)
已经有195人回复
传染病领域的几个定义求教
已经有6人回复
UDF程序,形参t重定义等ERROR求教
已经有9人回复
关于硕士研究生的月薪的定义
已经有13人回复
作物生育期的权威定义
已经有9人回复
关于原子发射光谱的检出限、精度、灵敏度、分辨率、门限等等名词的定义
已经有6人回复
【求助/交流】请教大家对酶活力是怎么定义的?
已经有7人回复
【转载】自旋多重度的定义及常用软件设置方法
已经有7人回复
【求助】文献中的1C的定义
已经有21人回复
简单回复
mengxc2楼
2011-06-01 16:58
回复
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 15:28:46
三星好评













回复此楼