У меня есть сторонний модуль, ведьма вызывает исключение в разделе инициализации модуля. Как я могу поймать это исключение в своем приложении?
Как поймать исключения в разделе инициализации модулей в Delphi
Ответы (2)
Вы не можете поймать такую вещь. RTL выполняет разделы инициализации, и правила заключаются в том, что никакие исключения не должны вызываться. Если возникают исключения, то ошибка является терминальной.
Другой способ решить эту проблему заключается в том, что когда секции инициализации начинают выполняться, структура обработки исключений языка еще не установлена. Это само устанавливается как часть инициализации RTL.
Решение состоит в том, чтобы исправить код, чтобы он подчинялся правилам. В разделах инициализации исключений не возникает.
Что ж, я полагаю, что вы могли бы перехватить код RTL, который выполняет инициализацию, и, возможно, заменить этот код RTL устойчивым к исключениям кодом. Но какой в этом смысл? Если раздел инициализации вызывает исключение, единственное разумное предположение, которое следует сделать, состоит в том, что модуль не инициализирован и, следовательно, не пригоден для использования. Пожалуйста, не пытайтесь зарыть голову в песок и игнорировать настоящую проблему. Исправьте сторонний код.
InitUnits
к System
. Кодовый хук сделает свою работу. Не хорошая идея ум.
- person David Heffernan; 06.06.2014
Вы можете попробовать OnExceptionEvent класса TApplicationEvents, но я не уверен, что это работает.