次のようなコードのC++DLLがあります。
LogMessage( "Hello world" );
try {
throw new int;
} catch( int* e ) {
LogMessage( "Caught exception" );
delete e;
}
LogMessage( "Done" );
このDLLはサードパーティのアプリケーションによってロードされ、上記のコードが呼び出されます。問題は、最初LogMessage
に呼び出されるだけです。例外ハンドラーがある場合でも、制御フローは不明に転送されます。
私はこれを見て、それが調査すべきいくつかのあいまいなバグなのか、それとも単にコンシューマーアプリケーションの邪悪な力なのかを判断できません。
コンシューマーアプリケーションがDLLのC++例外処理をオーバーライドすることは本当に可能ですか?
編集:答えに概説されているチェックするすべてのことを考えた後、問題は解決しました。実際のコードでは、スローするだけでなく、デバッグバージョンでMessageBoxW()Win32呼び出しを呼び出す例外をスローするための特別な関数があります。また、コンシューマーアプリケーションはメッセージボックス(NTサービス)を表示するのに問題があり、効果的に電話を切りました。したがって、C++例外処理の問題ではありません。