我是在WM_KILLFOCUS里面调用DestroyWindow,然后就触发了这个断言:
virtual ~CWindowImplRoot()
{
#ifdef _DEBUG
if(m_hWnd != NULL) // should be cleared in WindowProc
{
ATLTRACE(atlTraceWindowing, 0, _T("ERROR - Object deleted before window was destroyed\n"));
ATLASSERT(FALSE);
}
#endif //_DEBUG
}
然后google找解决方法,提供的方法是重写WindowImplRoot的OnFinalMessage,但是我重写这个方法之后,根本就不会触发这个函数。然后也试过其他的关闭窗口方法,都是触发这个断言。
但是如果别的窗口调用这个窗口类的DestroyWindow,就不会触发断言。
请问这种情况应该怎么解决。
5 个解决方案
#1
人工置顶~~~~
#2
你没想过DestroyWindow失败的可能性吗?
窗口类A如果不是主窗口, 则应该在其父窗口的WM_DESTROY消息中调用A类的DestroyWindow.
如果是主窗口, 那请参考 ATL/WTL例子程序中的主窗口是怎么做的.
窗口类A如果不是主窗口, 则应该在其父窗口的WM_DESTROY消息中调用A类的DestroyWindow.
如果是主窗口, 那请参考 ATL/WTL例子程序中的主窗口是怎么做的.
#3
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
在必要的地方加临界区或锁或等待事件。
《Windows核心编程》
在必要的地方加临界区或锁或等待事件。
《Windows核心编程》
#4
天天发这个有意思么?
#5
提醒:触发断言也是一种崩溃。
#1
人工置顶~~~~
#2
你没想过DestroyWindow失败的可能性吗?
窗口类A如果不是主窗口, 则应该在其父窗口的WM_DESTROY消息中调用A类的DestroyWindow.
如果是主窗口, 那请参考 ATL/WTL例子程序中的主窗口是怎么做的.
窗口类A如果不是主窗口, 则应该在其父窗口的WM_DESTROY消息中调用A类的DestroyWindow.
如果是主窗口, 那请参考 ATL/WTL例子程序中的主窗口是怎么做的.
#3
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
在必要的地方加临界区或锁或等待事件。
《Windows核心编程》
在必要的地方加临界区或锁或等待事件。
《Windows核心编程》
#4
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
在必要的地方加临界区或锁或等待事件。
《Windows核心编程》
天天发这个有意思么?
#5
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
在必要的地方加临界区或锁或等待事件。
《Windows核心编程》
天天发这个有意思么?
提醒:触发断言也是一种崩溃。