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