m_pfnCreateObject null exception

因為 CSplitterWnd 只能用在分割 單文檔 (SDI) 或是 多文檔的子架構 (MDI’s ChildFrm)

所以目前想到的解決方式是把原本 MDI 的 editor 改成 SDI

但是在這過程中發生了下面的 exception

2014-07-03-01

 

逐步執行 Debug 之後發現雖然是在顯示視窗框架才出現錯誤

m_pMainWnd->ShowWindow(m_nCmdShow);

 

但是其實在前面的建立視窗框架物件的時候就已經錯了,CreateObject() 沒有東西

CFrameWnd *Frame = aDocTemplate->CreateNewFrame(aDOC, NULL); // Sample.cpp

CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject(); // doctempl.cpp

 

MSDN 的解釋是如果類別支援動態建立,則這個指標只能有效,如果不是,函式會傳回 NULL。

搜尋一下將 DECLARE_DYNAMIC 改成 DECLARE_DYNCREATE 

IMPLEMENT_DYNAMIC 改成 IMPLEMENT_DYNCREATE 就可以解決了

但是兩者的差異還有點不太懂,需要再仔細研究一下

 

[參考資料]

1. 解释一下m_pfnCreateObject

2. 深入浅出MFC六大关键技术仿真之Frame6