Winapi 为什么EnumWindows失败,并且错误\u已经存在?
我的程序调用返回FALSE,GetLastError()偶尔返回ERROR_ready_EXISTS(#183,“当文件已经存在时无法创建文件”)。在这种情况下,这个错误意味着什么 以下是一段代码片段:Winapi 为什么EnumWindows失败,并且错误\u已经存在?,winapi,visual-c++,Winapi,Visual C++,我的程序调用返回FALSE,GetLastError()偶尔返回ERROR_ready_EXISTS(#183,“当文件已经存在时无法创建文件”)。在这种情况下,这个错误意味着什么 以下是一段代码片段: static BOOL CALLBACK CollectTopLevelWindowsEnum(HWND hWnd, LPARAM lParam) { // This one is good s_windows.push_back(hWnd); return TRUE;
static BOOL CALLBACK CollectTopLevelWindowsEnum(HWND hWnd, LPARAM lParam)
{
// This one is good
s_windows.push_back(hWnd);
return TRUE;
}
我很困惑。
SetLastError
不是回调的职责吗?是否可能是push_back
操作抛出而return TRUE
从未到达?如果在EnumWindows
之前设置lastError(0)会发生什么?很难做到。如果这是一个非常偶然的错误,那么我会猜测一个进程在枚举时创建一个窗口所导致的竞争。还有一个人有一个非常类似的问题:@ixe013-push_back不会扔;如果它这样做了,代码将得到一个异常,而不是一个错误代码。我将尝试在EnumWindows之前调用SetLastError(0),看看这是否有帮助,谢谢。谢谢@Hans-这种情况非常罕见,但一旦发生,每次都会继续发生。我曾看到EnumWindows在一个多小时内每分钟失败几次(直到电脑重新启动)。不是通常的竞争条件签名…下次发生时,使用Taskmgr开始逐个终止进程。运气好的话,你会找到那个作恶的人。我很困惑。SetLastError
不是回调的职责吗?是否可能是push_back
操作抛出而return TRUE
从未到达?如果在EnumWindows
之前设置lastError(0)会发生什么?很难做到。如果这是一个非常偶然的错误,那么我会猜测一个进程在枚举时创建一个窗口所导致的竞争。还有一个人有一个非常类似的问题:@ixe013-push_back不会扔;如果它这样做了,代码将得到一个异常,而不是一个错误代码。我将尝试在EnumWindows之前调用SetLastError(0),看看这是否有帮助,谢谢。谢谢@Hans-这种情况非常罕见,但一旦发生,每次都会继续发生。我曾看到EnumWindows在一个多小时内每分钟失败几次(直到电脑重新启动)。不是通常的竞争条件签名…下次发生时,使用Taskmgr开始逐个终止进程。运气好的话,你会找到那个作恶的人。
if (!EnumWindows(CollectTopLevelWindowsEnum, NULL)) {
DWORD lastError = GetLastError();
if (lastError != ERROR_SUCCESS) {
TRACE("EnumWindows failed: %d.\n", lastError);
}
}