У меня есть C ++ DLL с кодом, подобным этому:
LogMessage( "Hello world" );
try {
throw new int;
} catch( int* e ) {
LogMessage( "Caught exception" );
delete e;
}
LogMessage( "Done" );
Эта DLL загружена каким-либо сторонним приложением, и вызывается приведенный выше код. Проблема в том, что вызывается только первый LogMessage
- даже если есть обработчик исключений, поток управления передается неизвестному.
Я вижу это и не могу решить, является ли это какой-то неясной ошибкой, которую нужно исследовать, или просто злой силой потребительского приложения.
Возможно ли для потребительского приложения переопределить обработку исключений C ++ в DLL?
РЕДАКТИРОВАТЬ: Проблема решена после обдумывания всех вещей, чтобы проверить, изложенные в ответах. В реальном коде это не просто throw , есть специальная функция для выброса исключений, которая имеет вызов MessageBoxW () Win32 в отладочной версии. И потребительское приложение испытывало проблемы с отображением окна сообщения (это служба NT) и фактически зависало. Так что это не проблема обработки исключений в C ++.