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

DECLARE_DYNCREATE跟IMPLEMENT_DYNCREATE宏分析

2012-09-03 
DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏分析//EXE环境下以CCmdTarget继承CObject为例分析 DECLARE_DYNC

DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏分析

//EXE环境下以CCmdTarget继承CObject为例分析 DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏struct CRuntimeClass{// AttributesLPCSTR m_lpszClassName;int m_nObjectSize;UINT m_wSchema; // schema number of the loaded classCObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract classCRuntimeClass* m_pBaseClass;// OperationsCObject* CreateObject();BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;// Implementationvoid Store(CArchive& ar) const;static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum);// CRuntimeClass objects linked together in simple listCRuntimeClass* m_pNextClass;       // linked list of registered classes};//Cobject.hvirtual CRuntimeClass* GetRuntimeClass() const;//Cobject.cconst struct CRuntimeClass CObject::classCObject = { "CObject", sizeof(CObject), 0xffff, NULL, NULL, NULL };CRuntimeClass* CObject::GetRuntimeClass() const{return (CRuntimeClass*)(&CObject::classCObject);}//CCmdTarget头文件calss CCmdTarget : public CObject{public:static const CRuntimeClass classCCmdTarget;virtual CRuntimeClass* GetRuntimeClass() const;static CObject* PASCAL CreateObject();}//CCmdTarget源文件CObject * CCmdTarget::CreateObject(){return new CCmdTarget;}const CRuntimeClass CCmdTarget::classCCmdTarget = {"CCmdTarget", sizeof(class CCmdTarget), 0xFFFF, CCmdTarget::CreateObject, (CRuntimeClass*)(&CObject::classCObject), NULL};CRuntimeClass* CCmdTarget::GetRuntimeClass() const{return (CRuntimeClass*)(&CCmdTarget::classCCmdTarget);}//使用:    CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CCmdTarget);  CObject* pObject = pRuntimeClass->CreateObject();//以上未分析DECLARE_DYNAMIC,其实DECLARE_DYNCREATE是在ECLARE_DYNAMIC添加了动态创建,实现原理是一样的。

热点排行