Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4
Кент Рейсдорф. BORLAND C++BUILDER. Страница 411
Обратите внимание, что в предшествующих примерах мы захватываем ссылку на класс исключения VCL, но ничего не делаем с экземпляром класса, переданным блоку catch. Здесь мы действительно не заботимся о том, какую информацию содержит класс EInvalidGraphic, поскольку нам просто нужно знать, что исключение произошло. Вам следует просмотреть интерактивную справку по интересующему вас конкретному классу VCL, обрабатывающему исключения, для получения более детальной информации о свойствах и методах, доступных в этом классе.
Захват необрабатываемых исключений на уровне приложения
Вы можете также обрабатывать исключения на уровне приложения. ТАр- plication имеет событие с именем OnException, которое будет происходить при формировании каждого необрабатываемого исключения. Реагируя на это событие, вы можете захватить любое исключение, сформированное вашим приложением.
Вы перехватываете событие OnException точно так же, как мы это делали ранее, перехватывая события OnHint или Onldle:
1. Включите объявление функции в заголовок главной формы:
void _ fastcall OnException(TObject* Sender, Exception* E);
2. Добавьте в исходный модуль главной формы определение функции:
void fastcall TMainForm::OnException(TObject* Sender, Exception*
E) {
// сделайте здесь все, что нужно для обработки исключения
}
3. Присвойте адрес своей функции OnException() событию OnException объекта Application:
Application->OnException = SOnException;
Теперь функция OnException будет вызываться при возникновении необрабатываемых исключений.
Функция ShowExceptionQ может использоваться для отображения окна сообщения с описанием возникшей ошибки. Обычно эта функция вызывается обработчиком по умолчанию для OnException, но вы можете с равным успехом использовать ее в своих приложениях. Один из параметров обработчика события OnException — это указатель на объект Exception (Exception — это базовый класс VCL для обработки исключений). Чтобы вывести окно сообщения об ошибке, передайте объект Exception функции ShowException():