一、应用背景
有一个函数A运行时会弹出窗口,窗口中有确定按钮与取消按钮。
启动一线程运行A,根据返回的线程句柄,枚举线程句柄拥有的窗口,然后把窗口EndDialog掉:
BOOL CALLBACK CXRedGinaApp::EnumWinCloseWinProc(HWND hwnd, LPARAM lParam)
{
L_DEBUG(L"The thread has winodw, hwnd = 0x%x\n", hwnd);
if (TRUE == EndDialog(hwnd, IDOK))
{
L_DEBUG(L"EndDialog, success\n");
}
else
{
L_ERROR(L"EndDialog, failed\n");
}
return TRUE;
}
二、出错
表面看不出有内存出错,但在windbg.exe中报以下错误:
三、解决方法
结束窗口改为:TRUE == EndDialog(hwnd, IDCANCEL
BOOL CALLBACK CXRedGinaApp::EnumWinCloseWinProc(HWND hwnd, LPARAM lParam)
{
L_DEBUG(L"The thread has winodw, hwnd = 0x%x\n", hwnd);
if (TRUE == EndDialog(hwnd, IDCANCEL))
{
L_DEBUG(L"EndDialog, success\n");
}
else
{
L_ERROR(L"EndDialog, failed\n");
}
return TRUE;
}