CRuntimeClass

CRuntimeClass没有基类。
每个由CObject派生的类都与一个CRuntimeClass结构相联系,用户可以使用该结构获取一个对象及其基类的运行时信息。当需要额外的函数参数检查时,或当用户必须根据一个对象的类编写特殊目的代码时,在运行时确定该对象的类就非常有用。C++并不直接支持运行时类的信息。
此结构具有下列成员:
LPCSTR m_lpszClassName  存放ASCII类名的以空字符结尾的字符串。

int m_nObjectSize
    以字节为单位给出对象的大小。若此对象具有指向被分配的内存的数据成员,则此值不包含该内存的大小。

UINT m_wSchema
    分类编号(对不可分类的类,该值为-1)。对于此分类编号的详细说明,参见IMPLEMENT_SERIAL宏。

CObject* ( PASCAL* m_pfnCreateObject )( )
    是一个指向缺省的构造函数的函数指针,该构造函数创建一个你的类的对象(只有在类支持动态创建时才有效;否则,返回NULL)。

CRuntimeClass* ( PASCAL* m_pfn_GetBaseClass )( )
    如果你的应用程序是动态地链接到MFC的AFXDLL版本,则是一个指向函数的指针,该函数返回基类的CRuntimeClass结构。

CRuntimeClass* m_pBaseClass
    如果你的应用程序是静态地链接到MFC的,则是一个指向基类的CRuntimeClass结构的指针。
    Feature Only in Professional and Enterprise Editions 只有在Visual C++的专业版和企业版中才支持对MFC的静态链接。

CObject* CreateObject( );
    从CObject派生的类可以支持动态创建,这是在运行时创建一个指定类的对象的能力。例如,文档,视和框架类就应该支持动态创建。CreateObject成员函数可以用来实现这个功能,在运行时为这些类创建对象。

BOOL IsDerivedFrom( const CRuntimeClass* pBaseClass) const;
    如果IsDerivedFrom类成员的类是从基类派生而来,该基类的CRuntimeClass结构作为一个参数给出,则返回TRUE。IsDerivedFrom从该成员的类开始向上沿派生类链经过所有的类直到顶端,并且只有在没有与基类匹配的类时才返回FALSE。

注意:
要使用CRuntimeClass结构,你必须在你想要获取运行时对象信息的类的实现中包括IMPLEMENT_DYNAMIQ,IMPLEMENT_DYNCREATE,或IMPLEMENT_SERIAL宏。

请参阅:
CObject::GetRuntimeClass, CObject::IsKindOf, RUNTIME_CLASS, IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE, IMPLEMENT_SERIAL