我在看深入浅出MFC第三章Frame6是看到这句代码,完整的两行代码是
#0006 struct CRuntimeClass CObject::classCObject =
#0007 { szCObject, sizeof(CObject), 0xffff, NULL, NULL };
没看懂,希望哪位高手给解释下

解决方案 »

  1.   

    我书上和你的不同
    #0007 { szCObject, sizeof(CObject), 0xffff, NULL, NULL, NULL };不知道你哪里没明白。我就假设你是指整个都不明白。可能我们会因书的版本有区别,你按照我指的页数对比着你的书凑合看吧。CRutimeClass原理参考书P97页<类别型录网与CRuntimeClass>
    在你重新理解原理之后,下面的文字可能会对你有帮助。
    我们看P117的Frame6范例程序,MFC.h #0016-#0031是结构体定义。P118#0039-#0052是对应的宏。
    其中#0050 CRuntimeClass* class_name::class##class_name = {\如果这句话对应CObject翻译下的话就是CRuntimeClass CObject::classCObject = {
    不过CObject在这个程序中是作为所有类的基类,他很特殊,不能简单地用现有的宏来实现运行时类识别,所以要单独做(参考P100,有说明)。
    最后看下参数szCObject, sizeof(CObject), 0xffff, NULL, NULL, NULL
    这是对classCObject结构体对象赋值,前2个没什么好说的,第三个为固定的0xffff,第4个就是函数指针指NULL,后面两个NULL看结构体就能明白的。