[英]Catching exceptions thrown from DLLs
当异常退出DLL中的函数时,mingw32运行时只调用
terminate
std :: unexpected而不是将异常传播给调用DLL的代码。 这个问题有什么解决方案? DLL和调用它的应用程序都使用相同的编译器进行编译。
mingw32支持两种不同的异常机制:SJLJ和Dwarf2。 他们中的一个应该比另一个更好吗? 也许唯一的选择是切换到MSVC或ICC或者单独更改构建选项会有帮助吗?
请注意,即使catch(...)也不会捕获任何异常,甚至不是内置类型(throw 1;),因此它与异常类型的可见性无关。
运行时假设extern "C"
函数永远不会抛出异常吗? 我不熟悉MinGW,但我知道Visual Studio有一堆命令行参数来控制这种行为。 例如, /EHs
选项将使它假设extern "C"
永远不会抛出,并且它将通过调用std::unexpected()
来处理抛出的函数,而std::unexpected()
又调用std::terminate()
。 您可能希望调用std::set_unexpected()
来建立意外的异常处理程序并查看它是否陷阱。
当从另一个共享库抛出异常时,gcc会保留有关异常类型的信息,这是一个问题。
看到这个错误报告,并尝试谷歌搜索“gcc异常共享库”(我还没有找到解决该问题的方法)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.