DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE这两个宏 declare dyncreate

DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE这两个宏 declare dyncreate
#define before_MFC最近老板管的紧,自己能支配的时间真的不多。偷偷拜读《深入浅出MFC》
阅读到第三章有点开始卡壳了,不过还好把这两个宏的机理研习出来了。先记在这里,以后若又忘了可以翻翻。首先说说动态创建中重要的、不可缺少的这个数据结构CRuntimeClassstruct CRuntimeClass{ char* m_lpszClassName;//用于存放类名 int m_nObjectSize;//用于存放类大小 UNIT m_mSchema;//目前不知道干啥用,以后补充 CObject* (PASCAL*m_pfnCreateObject)();//存放类中CreateObject()函数的地址,如果该类是//抽象类,则该值为NULL。这一点很重要,通过这个值//是否是NULL,可以判断是否能动态建立该类的新对象。 CRuntimeClass* m_pBaseClass; //用于存放其父类的地址 CObject* CreateObject(); //用于创建对象,后面详细解释 static CRuntimeClass* _stdcall Load(); //就当做是一个匹配函数,后面详细解释为啥我说是匹配 //函数}在头文件中的宏#define DECLARE_DYNCREATE(class_name)DECLARE_DYNAMIC(class_name)//这个是声明了一个静态变量和函数,在前一节有说明static CObject* _stdcallCreateObject();//这个函数就是为了创建一个新的对象,返回对象指针。指针//类型为CObject,则如果指到CObject派生出的类,因为虚函数//的性质,依然调用的是派生类的函数在执行文件中解释了static CObject* _stdcallCreateObject();#define IMPLEMENT_DYNCREATE(class_name,base_class_name)

CObject* _stdcallclass_name::CreateObject()

{ return newclass_name;}//每个非抽象类中如果调用了这个宏,则里面的CreateObject()

//就在于建立一个该类的新对象,并返回新对象的地址。用祖宗

//类CObject的指针指向这个新地址

_IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,class_name::CreateObject)//最后一个参数表明赋予的是这个函数的地址

再来看前面CRuntimeClass中的两个函数

CObject* CRuntimeClass::CreateObject()

{

if(m_pfnCreateObject==NULL))

{

//抽象类这个值就为NULL,非抽象类如上面所述这个值被赋值为了类中CreateObject()函数的地址。

return NULL;

}

CObject*pObject = (*m_pfnCreateObject)();

//若这个值存在,这调用这个函数,函数的作用前面已经说了,就是创建一个新对象。通了吧~~~

returnpObject;

}

解释完这两个宏再讲一下如何动态调用吧。

首先在头文件中得写上这么一行代码

DECLARE_DYNCREATE(class_name);//class_name是你需要动态创建了类名,注意非抽象类。执行文件中得写上这么一行代码IMPLEMENT_DYNCREATE(class_name,base_class_name)//base_class_name是父类然后假如从 输入了一个类名 szClassName;CRuntimeClass pClass;for(pClass = pFirstClass; pClass != NULL; pClass = pClass-> m_pNextClass){if(strcmp(szClassName,pClass->m_lpszClassName)==0)return pClass;}//以上这段代码也就是Load函数的核心部分,就是匹配与输入的名字相同的类,所以前面说Load函数是个匹配的过程pClass->CreateObject();//调用的为该类中的CreateObject();因为没类中都会有一个CRuntimeClass,CRuntimeClass里都会有CeateObject()建立一个新的该类欢迎提建议或问题,必定及时回复

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/364934.html

更多阅读

73岁 与84岁 之说的来历 避讳73和84这两个岁数

73(岁)与84(岁)之说 的来历毛主席晚年谈论他的健康时说:“73(岁),84(岁),阎王不请,自己到。”他老人家恰恰是84虚岁逝世的。民间也有73岁,84岁是老人的两个门槛之说。以后,每逢清明扫墓到墓地,我总要下意识地看看逝者碑刻上的年龄,按照统计学来观察,

县令捕蝗这两个县令的共同点是什么 县令捕蝗阅读答案

县令捕蝗 这两个县令的共同点是什么 悬赏分:0 - 解决时间:2010-5-2017:43县令捕蝗 这两个县令的共同点是什么原文:钱勰为如皋令,会岁旱蝗发,而泰兴令独绐群将云:“县界无蝗。”已而蝗大起。郡将诘之,令辞穷,乃言县本无蝗,盖自如皋飞来,乃檄如

声明:《DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE这两个宏 declare dyncreate》为网友澎湃小青年分享!如侵犯到您的合法权益请联系我们删除