我知道,Stackoverflow上有很多类似的问题。但没有一个答案可以解决我的问题。
我正在创建DLL,以这种方式导出一些函数:
extern "C" __declspec(dllexport) int init() { ... }
我在Windows XP上使用MinGW 4.4。 init()
中有例外,因为我使用Apache Thrift,并且有ttransport->open()
之类的代码,其中ttransport
是boost::shared_ptr<TTransport>
,TTransport
- Apache Thrift's类。如果ttransport->open()
引发TTransportException
异常(TTransportException
继承自std::exception
),则可能出现这种情况。
该异常导致我的DLL加载的主机程序崩溃。主持程序由第三人编写,我没有主程序代码。
因此,我在徘徊,为什么这样的包装方法无法帮助(主机程序以同样的方式崩溃):
try
{
ttransport->open();
}
// or just catch(...)
catch (std::exception &e) // or, using TTransportException
{
return 42;
}
有人可以说我做错了什么吗?
异常不是我的 - 所有都是用Apache Thrifts库编写的,所以我别无选择。