Winapi 为什么EnumWindows失败,并且错误\u已经存在?

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;

我的程序调用返回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;
}


我很困惑。
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);
    }
}