У меня есть C++ DLL с кодом вроде этого:Возможно ли, что потребитель библиотеки может переопределить обработку исключений C++?
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++.
Я принимаю этот ответ, потому что он предлагает самый широкий список вещей для проверки при отладке таких проблем. – sharptooth