Stackoverflowにも同様の質問がたくさんあることを私は知っています。しかし、どの答えも私の問題を解決することはできません。
私はこの方法でいくつかの関数をエクスポートするDLLを作成しています:
extern "C" __declspec(dllexport) int init() { ... }
私はWindowsXPでMinGW4.4を使用しています。には例外があります。これは、 Apache Thriftを使用しているためです。また、、、、、および--ApacheThriftのクラスのinit()
ようなコードがありますttransport->open()
。(から継承された)例外をスローする場合があります。ttransport
boost::shared_ptr<TTransport>
TTransport
ttransport->open()
TTransportException
TTransportException
std::exception
その例外により、DLLがロードされているホストプログラムがクラッシュします。ホストプログラムは第三者によって作成されたもので、ホストプログラムのコードはありません。
したがって、私はさまよっています、なぜこのようなラッパーアプローチは役に立たないのですか(ホストプログラムは同じようにクラッシュします):
try
{
ttransport->open();
}
// or just catch(...)
catch (std::exception &e) // or, using TTransportException
{
return 42;
}
誰かが私が間違っていることを言うことができますか?
例外は私のものではありません。すべてがApacheThriftsライブラリで記述されているため、選択の余地はありません。