24小时热门版块排行榜    

查看: 892  |  回复: 1
【奖励】 本帖被评价1次,作者yuancongsen增加金币 0.6 个

yuancongsen

银虫 (小有名气)


[资源] 【讨论】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成员的地址,建立”同宗“链。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
mengxc2楼
2011-06-01 16:58   回复  
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 15:28:46
三星好评  
相关版块跳转 我要订阅楼主 yuancongsen 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 xvJS1BYDxvBS 2026-10-31 7/350 2026-11-01 14:50 by BCdvBAEpt3zm
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 1uaZt2kAZj2S 2026-10-31 6/300 2026-11-01 14:42 by BCdvBAEpt3zm
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +5 X5bHxOULxFqb 2026-10-30 13/650 2026-11-01 14:16 by BCdvBAEpt3zm
[硕博家园] 越来越担心硕士毕业后没有竞争力了 +9 zuesli 2026-10-27 15/750 2026-11-01 12:59 by Equinoxhua
[考博] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 xvJS1BYDxvBS 2026-10-31 6/300 2026-11-01 12:53 by BCdvBAEpt3zm
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 xvJS1BYDxvBS 2026-10-31 3/150 2026-11-01 12:53 by BCdvBAEpt3zm
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 xvJS1BYDxvBS 2026-10-31 5/250 2026-11-01 12:51 by BCdvBAEpt3zm
[考研] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 1uaZt2kAZj2S 2026-10-31 8/400 2026-11-01 12:38 by BCdvBAEpt3zm
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 1uaZt2kAZj2S 2026-10-30 7/350 2026-11-01 12:27 by BCdvBAEpt3zm
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 1uaZt2kAZj2S 2026-10-30 16/800 2026-11-01 12:14 by BCdvBAEpt3zm
[基金申请] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 hKe7U1kad5Sg 2026-10-31 6/300 2026-11-01 11:09 by BCdvBAEpt3zm
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 xvJS1BYDxvBS 2026-10-31 4/200 2026-11-01 11:01 by BCdvBAEpt3zm
[论文投稿] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 X5bHxOULxFqb 2026-10-30 26/1300 2026-11-01 10:22 by BCdvBAEpt3zm
[基金申请] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 X5bHxOULxFqb 2026-10-30 21/1050 2026-11-01 06:46 by YXM1FDCSE8Bn
[基金申请] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 xvJS1BYDxvBS 2026-10-31 8/400 2026-11-01 05:48 by YXM1FDCSE8Bn
[论文投稿] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 1uaZt2kAZj2S 2026-10-31 8/400 2026-11-01 03:59 by YXM1FDCSE8Bn
[找工作] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 1uaZt2kAZj2S 2026-10-31 6/300 2026-11-01 03:56 by YXM1FDCSE8Bn
[考博] 2027博士申请-临床检验诊断学、病原生物学、微生物方向 50+3 yyh@ 2026-10-28 4/200 2026-10-31 12:47 by 可淡不可忘
[文学芳草园] 闲聊 +3 myrtle 2026-10-25 6/300 2026-10-29 15:28 by myrtle
[考博] 申博求助 20+3 Katrinae 2026-10-26 4/200 2026-10-27 09:56 by 北京莱茵编辑
信息提示
请填处理意见