BOOL CWnd::Attach(HWND hWndNew)
{
ASSERT(m_hWnd == NULL); // only attach once, detach on destroy//出現在這一行
ASSERT(FromHandlePermanent(hWndNew) == NULL);//還有這一行也出現斷言錯誤
// must not already be in permanent map
// now hook into the AFX WndProc
WNDPROC* lplpfn = GetSuperWndProcAddr();
WNDPROC oldWndProc = (WNDPROC)::SetWindowLongPtr(hWnd, GWLP_WNDPROC,
(INT_PTR)AfxGetAfxWndProc());
ASSERT(oldWndProc != AfxGetAfxWndProc());//這一行也出現了
if (*lplpfn == NULL)
*lplpfn = oldWndProc;
else if (*lplpfn != oldWndProc)
{
TRACE(traceAppMsg, 0, "Error: Trying to use SubclassWindow with incorrect CWnd\n");
TRACE(traceAppMsg, 0, "\tderived class.\n");
TRACE(traceAppMsg, 0, "\thWnd = $%08X (nIDC=$%08X) is not a %hs.\n", (UINT)(UINT_PTR)hWnd,
_AfxGetDlgCtrlID(hWnd), GetRuntimeClass()->m_lpszClassName);
ASSERT(FALSE);//還有這一行
// undo the subclassing if continuing after assert
::SetWindowLongPtr(hWnd, GWLP_WNDPROC, (INT_PTR)oldWndProc);
}
給位麻煩給我分析分析原因
uj5u.com熱心網友回復:
從斷言來看, 應該是出現了兩次 SubclassWindow 操作,可能是兩次 DDX_Control 關聯了同一個控制元件
uj5u.com熱心網友回復:
你Attach完之后要Detach,之后才能再Attach,對于同一個成員變數而言.uj5u.com熱心網友回復:
所謂斷言,就是編程的時候,在邏輯上斷定一定會發生的事情比如,斷言(正常人每天吃三餐),如果你吃了三餐,那就是正常的,否則,你就會餓肚子
ASSERT(m_hWnd == NULL),在函式執行前的時刻,斷定,m_hWnd是空的,也就是你的視窗類還沒有跟別的視窗關聯,如果m_hWnd 不為空,意味著你的程式發生了錯誤
uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:
呼叫堆疊 里 看 你的 代碼, 上面都不是你的代碼 !轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/86850.html
標籤:網絡編程
上一篇:VC6++翻譯是總是出現以下這樣的問題怎么辦?怎么解決都不行求大神幫忙。
下一篇:cpp檔案損壞,求修復方案
