代码之家  ›  专栏  ›  技术社区  ›  Alex

C++中的Winsock2+OpenSSL:如何捕捉它们的异常?

  •  0
  • Alex  · 技术社区  · 10 年前

    我想通过OpenSSL加密来捕获Winsock2中的套接字时抛出的异常,但我不知道该怎么做。在C#中,我只能捕获基类异常,但在C++中,尝试用“catch(std::Exception e)”来捕获它们是行不通的。它只适用于“catch(…)”,但我需要一些对象来获取详细信息。

    在C++中,通过为基类std::exception创建一个catch块来捕获每种异常是不可能的吗?还是我从其他基类派生出异常?

    干杯 亚历克斯

    3 回复  |  直到 10 年前
        1
  •  2
  •   Bukes    10 年前

    据我所知,winsock和OpenSSL是基于C的项目,因此不会引发C++异常。

    也就是说,这些项目有可能 提升 结构化异常。例如,如果向这些项目之一导出的函数传递了错误的缓冲区,则操作系统可能会引发访问冲突异常。

    虽然可以 catch such exceptions ,您可能不希望-引发异常的应用程序的状态可能不一致。

        2
  •  1
  •   Andrew Komiagin    10 年前

    在OpenSSL中,当发生错误时,更详细的信息存储在“错误队列”中。使用错误队列可以做的最简单的事情是打印整个队列。这可以通过 ERR_print_errors_fp() 以打印错误队列。您是否在使用C++包装器?请注意,C++异常在大多数情况下都是特定于框架的。有许多示例中,框架异常不是从 std::exception 。例如,在MFC中,所有异常都源自 CException 与此无关 std::异常 .

        3
  •  1
  •   Mr.Yellow    10 年前

    您甚至可以在c++中抛出一个整数作为“异常对象”。所以异常没有公共基类。 您必须查看正在使用的库文档,并搜索可能的异常。 如果您使用的是Visual Studio,则可以在引发异常时通知调试器停止(主菜单->调试->异常…或查看“输出窗口”并搜索引发的异常类型)。