24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 840  |  回复: 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 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料考研求调剂总分280 +15 mkjlz1 2026-04-06 17/850 2026-04-07 09:23 by audery861007
[考研] 338求调剂 +4 我想上岸ii 2026-04-05 4/200 2026-04-06 21:04 by 木子君1218
[考研] 307求调剂 +3 所念及所望 2026-04-06 3/150 2026-04-06 17:30 by 土木硕士招生
[考研] 化学调剂求助 +8 LULONG1 2026-04-03 8/400 2026-04-06 10:26 by dongzh2009
[考研] 324求调剂 +3 k可乐 2026-04-05 4/200 2026-04-06 09:54 by 蓝云思雨
[考研] 290求调剂 +7 luoziheng 2026-04-04 7/350 2026-04-04 23:17 by lqwchd
[考研] 22408,264求调剂 +3 ywh729 2026-04-03 4/200 2026-04-04 11:04 by ywh729
[考研] 387求调剂 +4 爱吃片豆土 2026-04-03 5/250 2026-04-04 08:10 by 岸上的一条鱼
[考研] 265求调剂 +17 林深温澜 2026-04-01 20/1000 2026-04-04 01:09 by userper
[考研] 265求调剂 +20 梁梁校校 2026-04-01 21/1050 2026-04-04 00:38 by userper
[考研] 288求调剂 一志愿哈工大 材料与化工 +39 洛神哥哥 2026-03-31 41/2050 2026-04-03 21:51 by qlm5820
[考研] 求调剂 +4 压力??大 2026-04-03 4/200 2026-04-03 21:36 by 啵啵啵0119
[考研] 考研调剂 +3 Draa 2026-04-03 3/150 2026-04-03 17:37 by hgwz7468
[考研] 工科341分调剂 +3 洛多罗 2026-04-03 3/150 2026-04-03 14:20 by 1753564080
[考研] 330求调剂 +3 白神呜呼呼 2026-04-02 3/150 2026-04-03 10:15 by 蓝云思雨
[考研] 302求调剂 +9 zyx上岸! 2026-04-02 9/450 2026-04-02 23:07 by 马儿快快地跑
[考研] 学硕化学工程与技术,一志愿中国海洋大学320+求调剂 +8 披星河 2026-04-02 8/400 2026-04-02 14:12 by oooqiao
[考研] 材料专业求调剂 +10 月月鸟木 2026-04-01 10/500 2026-04-02 12:57 by wxiongid
[考研] 304求调剂 +12 素年祭语 2026-03-31 15/750 2026-04-01 22:41 by peike
[考研] 340求调剂 +4 希望如此i 2026-03-31 4/200 2026-03-31 16:40 by 690616278
信息提示
请填处理意见