还是先看定义
#define
IMPLEMENT_DYNCREATE(class_name, base_class_name) /
CObject* PASCAL class_name::CreateObject() /
{ return
new class_name; } /
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, /
class_name::CreateObject)
那么IMPLEMENT_DYNCREATE (mydoc,Cdocument)等同于
CObject* PASCAL mydoc::CreateObject() /
{ return
new mydoc; } /
IMPLEMENT_RUNTIMECLASS(mydoc, Cdocument, 0xFFFF, /
mydoc::CreateObject)
IMPLEMENT_RUNTIMECLASS又是什么东东呢?
#define
IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) /
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name
= { /
#class_name,
sizeof(class class_name),
wSchema, pfnNew, /
RUNTIME_CLASS(base_class_name), NULL }; /
CRuntimeClass* class_name::GetRuntimeClass() const /
{ return RUNTIME_CLASS(class_name); } /
那么IMPLEMENT_DYNCREATE (mydoc,CDocument)等同于
CObject* PASCAL mydoc::CreateObject() /
{ return
new mydoc; } /
AFX_COMDAT
const AFX_DATADEF CRuntimeClass mydoc::class##mydoc
= { /
#mydoc,
sizeof(class mydoc), 0xFFFF,
mydoc::CreateObject, /
RUNTIME_CLASS(CDocument), NULL }; /
CRuntimeClass* mydoc::GetRuntimeClass() const /
{ return RUNTIME_CLASS(mydoc); } /
加上
#define
AFX_COMDAT
#define
AFX_DATADEF
#define
RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
上面
那么IMPLEMENT_DYNCREATE (mydoc,CDocument)等同于
CObject* __stdcall
mydoc::CreateObject() /
{ return
new mydoc; } /
const
CRuntimeClass mydoc::classmydoc = { /
#mydoc,
sizeof(class mydoc), 0xFFFF,
mydoc::CreateObject, /
(CRuntimeClass*)(& CDocument::classCDocument), NULL }; /
CRuntimeClass* mydoc::GetRuntimeClass() const /
{ return ((CRuntimeClass*)(& mydoc::class
mydoc)); } /
好像还是不很明白,是吗?先看下一章吧