捕获DLL引发的异常

Tro*_*nic 11 c++ dll exception

当异常退出DLL中的函数时,mingw32运行时只调用terminate std :: unexpected而不是将异常传播给调用DLL的代码.这个问题有什么解决方案?DLL和调用它的应用程序都使用相同的编译器进行编译.

mingw32支持两种不同的异常机制:SJLJ和Dwarf2.他们中的一个应该比另一个更好吗?也许唯一的选择是切换到MSVC或ICC或者单独更改构建选项会有帮助吗?

请注意,即使catch(...)也不会捕获任何异常,甚至不是内置类型(throw 1;),因此它与异常类型的可见性无关.

D.S*_*ley 5

运行时假设extern "C"函数永远不会抛出异常吗?我不熟悉MinGW,但我知道Visual Studio有一堆命令行参数来控制这种行为.例如,该/EHs选项将使它假设extern "C"永远不会抛出,它将通过调用std::unexpected()哪些函数依次调用来处理抛出的函数std::terminate().您可能希望调用std::set_unexpected()以建立意外的异常处理程序并查看它是否陷阱.


BЈо*_*вић 0

当从另一个共享库抛出异常时,gcc 保留有关异常类型的信息似乎存在问题。

请参阅此错误报告并尝试谷歌搜索“gcc 异常共享库”(我仍然没有找到该问题的解决方案)