从MSDN规范开始,CloseHandle
如果在调试器下运行无效句柄时会抛出异常。如何从CloseHandle()中捕获异常
由于我想要干净的代码,我插入了一些代码来捕捉它。但是,它不起作用,异常不被捕获。
#include <windows.h>
#include <tchar.h>
#include <exception>
/* omitted code */
CloseHandle(myHandle); // close the handle, the handle is now invalid
try {
success = CloseHandle(myHandle);
} catch (std::exception& e) {
_tprintf(TEXT("%s\n"), e.what());
} catch (...) {
_tprintf(TEXT("UNKNOWN\n"));
}
我从调试器得到以下两个错误:
第一次机会异常:0xC0000008:指定了无效的句柄。
未捕获的异常:0xC0000008:指定了无效的句柄。
我认为第一次机会的异常是正常的,因为它在catch语句应该得到它之前被触发。然而,未捕获的异常让我想知道这里实际上是错误的。
如果它仍然引发此异常,即使您有__try/__除外,您可能已打开此异常。转到菜单Debug/Exceptions/Win32 Exceptions并禁用选项c0000008指定了无效句柄。确定打破Visual Studio后应停止。 – user720594 2012-07-04 10:11:11