请教《深入浅出mfc》第三章的frame3的一个问题

Virus2003 2003-08-24 03:43:41
在第三章的对DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC的介绍中,关于CRuntimeClass的介绍中并没有定义链表的头指针中需要的CRuntimeClass* CRuntimeClass::pFristClass。侯老师是在例子frame3的mfc.h文件中重新定义了CRuntimeClass,以及DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC的宏定义,在CRuntimeClass的定义中加入了对头指针的定义。

请问在实际的应用中是怎么样的??是否也需要这样重新定义??msdn对CRuntimeClass地解释中也没有头指针,那怎么解决头指针的问题呢????
...全文
48 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
claider 2003-10-25
  • 打赏
  • 举报
回复
看眼界了,呵呵。
Microsoftadherent 2003-10-04
  • 打赏
  • 举报
回复
建立这些主要是为了RTTI和DYNAMIC CREATE,在标准C++里面支持RTTI,但是不支持DYNAMIC CREATE,我个人认为标准C++的RTTI没有MFC的RTTI好。对于多重继承,MFC无法解决菱形结构。(同时有多个基类从CObject派生)
vcppman 2003-10-02
  • 打赏
  • 举报
回复
书上用的并不是mfc4.2的源码
BigF 2003-10-02
  • 打赏
  • 举报
回复
我觉得书上只是给出了一个简单的实现方法, 实际中MFC肯定不是这样解决的, 所以没有必要深究. 而且, 我觉得单链表肯定是不能完全解决问题的, 至少多继承的时候就没有办法判断
Virus2003 2003-08-26
  • 打赏
  • 举报
回复
可是我看了msdn里面的CRuntimeClass连pNextClass这个变量都没有啊,那又怎么实现书上frame3中的对“继承树”进行的遍历呢????书上是这样写的。最好能给出具体代码
for (pClass = CRuntimeClass::pFirstClass; pClass != NULL;
pClass = pClass->m_pNextClass)
{
cout << pClass->m_lpszClassName << "\n";
cout << pClass->m_nObjectSize << "\n";
cout << pClass->m_wSchema << "\n";
}
fyfsoft 2003-08-25
  • 打赏
  • 举报
回复
咱们自己都不用了,CDialog 里面已经作好了》
xuguilin 2003-08-25
  • 打赏
  • 举报
回复
在VC6.0(MFC 4.21)中的具体实现并不是像书中所说的那样(当然原理是一样的),它在CRuntimeClass中并没有pFirstClass类,当用到DECLARE_DYNAMIC 和 DECLARE_DYNCRATE 时并没有使用pNextClass来形成链表,而是用pBassClass来形成一个树型结构(因为在不需要Serialize时是不需要用到的),但是若用了DECLARE_SERIAL则需要用到pNextClass指针把所有需要Serialize的对象链程链表。书中所以那样用是为了方便
Virus2003 2003-08-25
  • 打赏
  • 举报
回复
我理解书上的意思是,在头文件中加入DECLARE_DYNAMIC(DYNCRATE OR SERIAL)在cpp文件中加入IMPLEMENT_DYNAMIC(DYNCREATE OR SERIAL),就自动生成了一个CRuntimeClass结构的链表了,(不知道是不是这样)

可是在cpp文件中调用头指针pFristClass的时候,由于CRuntimeClass并没有定义这个变量,那我该怎么办呢???
lionhu2003 2003-08-25
  • 打赏
  • 举报
回复
以下是我个人的观点,如果不对,请高手指正。

书中CRuntimeClass* CRuntimeClass::pFristClass只是CRuntimeClass的一个静态变量,在DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC中并不需要定义,但是在CObject中要定义它并初始化为NULL,因为访真的程序中要把CRuntimeClass结构形成一个链表。然后每当你派生自己的类,并在类声明中写下DECLARE_DYNAMIC和在类定义中写IMPLEMENT_DYNAMIC时,自动在CRuntimeClass结构组成的链表中记录自己派生类的CRuntimeClass结构。

在实际的框架生成的程序中不需要这样定义,我想在真实MFC类中,也是这样一种机制,但是不一定如书中仿真的那样,可能更简单,但是原理应该是一样的,每当你派生自己的类,并在类声明中写下DECLARE_DYNAMIC(DYNCRATE OR SERIAL)和在类定义中写IMPLEMENT_DYNAMIC(DYNCREATE
OR SERIAL)时都是要形成一个CRuntimeClass结构的链表,然后在链表中寻找需要的动态生成和串行化信息)。

Virus2003 2003-08-25
  • 打赏
  • 举报
回复
楼上的能说得清楚点吗??

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧