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