范例6中为什么不能动态创建CView等类??struct CRuntimeClass
{
// Attributes
   LPCSTR m_lpszClassName;
   int m_nObjectSize;
   UINT m_wSchema; // schema number of the loaded class
   CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
   CRuntimeClass* m_pBaseClass;   CObject* CreateObject();
   static CRuntimeClass* PASCAL Load();   // CRuntimeClass objects linked together in simple list
   static CRuntimeClass* pFirstClass; // start of class list
   CRuntimeClass* m_pNextClass;    // linked list of registered classes
};这个结构中的m_pfnCreateObject是什么意思?
它什么是NULL?什么时候又不是??

解决方案 »

  1.   

    Error: Trying to create object which is not DECLARE_DYNCREATE
    or DECLARE_SERIAL: CView.CView明明已经DECLARE_DYNAMIC(CView)
      

  2.   

    CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
       上面这个是保存下面这个函数的地址的,是一个函数打针。
       下面这个是一个采用了Factory Method模式的函数   CObject* CreateObject();
      

  3.   

    回复人: grayblaze(grayblaze) ( ) 信誉:100  2006-02-19 16:37:00  得分: 0  
     
     
       Error: Trying to create object which is not DECLARE_DYNCREATE
    or DECLARE_SERIAL: CView.CView明明已经DECLARE_DYNAMIC(CView)
      
     
    ----
    DECLARE_DYNCREATE
    DECLARE_SERIAL
    DECLARE_DYNAMIC
    以上这三个是不同的。看不懂的话就把第三章多看几遍吧,是全书的精华也是基础部分。
      

  4.   

    CView不能创建完全是因为m_pfnCreateObject指向了NULL
    它指向了CObject* CreateObject();但是为什么CView没有CObject* CreateObject()?而只有
    CMYy
      

  5.   

    wangyangcheng兄提醒的对,不好意思,我没看清楚DECLARE_DYNCREATE和DECLARE_DYNAMIC谢谢提醒(: