我在处理例外方面有问题。在我的代码中,我输入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/

10-10 17:56
查看更多