ASSERT是斷言,是C++中用於調試的宏。原理如下:檢查傳入參數是否為假(即0),如果是,則在stderr中輸出錯誤並彈出窗口。偽代碼如下:
void myassert(int canshu){
如果(參數表){
返回;
}
否則{
//彈出並輸出
}
}
好了,進入正文。
報錯部分的代碼是ASSERT(::is window(m _ hWnd));
通過m_hWnd可以判斷這個程序是MFC寫的,用IsWindow函數判斷窗口是否有效,傳入判斷句柄。如果窗口有效,則輸出TRUE,否則輸出FALSE。
以下是MSDN對這壹功能的解釋:
IsWindow函數(winuser.h)
10/13/2021
閱讀2分鐘
這個頁面有幫助嗎?
確定指定的窗口句柄是否標識現有窗口。
句法
C++CopyBOOL IsWindow(?[in,可選]HWND HWND);
因素
[輸入,可選] hWnd
類型:?HWND
要測試的窗口的句柄。
返回值
類型:?布爾
如果窗口句柄標識壹個現有的窗口,返回值是非零的。
如果窗口句柄不標識現有窗口,則返回值為零。
評論
壹個線程不應該使用?IsWindow?因為調用此函數後窗口可能會被銷毀。此外,因為窗口句柄被回收,句柄甚至可以指向不同的窗口。
例子
有關示例,請參見?創建無模式對話框。
然後可以看到,由於某種原因,句柄或者句柄對應的窗口無效,導致IsWindow返回FALSE,ASSERT接收返回值FALSE,判斷函數錯誤,於是報錯。
綜上所述,應該是程序作者的代碼在創建窗口時出錯了,應該反饋給程序作者。