LoadLibrary
とGetProcAddress
を使用してDLL内の関数を呼び出すVisual Studio 6で書かれたアプリケーション(私はFMLをよく知っています)に取り組んでいます。新しいコードはVC6でコンパイルできず、新しいコンパイラが必要です。 DLLにはC++オブジェクトを構築する関数がいくつかあり、VC6プログラムはそのオブジェクトを抽象クラスで使います。MSVC6はextern "C"関数からの例外をどのように処理できますか?
これはうまくいきますが、GetProcAddress
で検索された関数が例外をスローすると、例外がDLL内でキャッチされても問題になります。私は、抽象クラスのメソッドが例外をスローしたときにこれが起こらないことに気づいた。その場合、物事は正常に機能します。
私はここで間違っていますか? VC6で例外を正しく処理するコードを生成させるにはどうすればよいですか?
編集は:
extern "C" __declspec(dllexport) Box* getBox(const char* addr)
{
try {
return createBox(addr);
} catch (std::exception& ex) {
LOG_ERROR("Open failed: " << ex.what());
return 0;
} catch (...) {
LOG_ERROR("Error while opening.");
return 0;
}
}
すべてのモジュールがmsvcランタイムの同じインスタンスを使用していますか? –
これは問題ではありません。 –
@Brian DLL内のすべてのハンドラをキャッチしていますか?例外をキャッチしないハンドラの例を見ることができますか? –