我在处理例外方面有问题。在我的代码中,我输入hIn = INVALID_HANDLE_VALUE来测试异常,而“ null”是一个不存在的文件。我的代码是
__try
{
hIn = CreateFile (_T("null"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
hIn = INVALID_HANDLE_VALUE;
ReadFile (hIn, buffer, BUF_SIZE*sizeof(DWORD), &nIn, NULL);
}
__except(GetExceptionCode() == EXCEPTION_INVALID_HANDLE ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
_tprintf (_T("-> Error OPENING FILE <-\n"));
return -1;
}
我不明白为什么它没有捕获到异常。问题是什么?
先感谢您
最佳答案
永远不会输入__except
块,因为ReadFile
不会引发异常。
请记住,Windows API与编程语言无关,需要提供一种可由任何编程语言使用的接口。并非所有语言都支持异常,即使是那些使用不同机制的语言也是如此。因此,对于Windows API之类的API,抛出异常根本不是一种选择。
您问题中的两个API调用均通过返回值指示错误。您需要检查这些返回值并采取相应措施。并非所有函数都以相同的方式报告错误,因此您需要密切注意所调用的每个API函数的文档。
关于c - C-Windows异常处理程序无效句柄,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30666952/