Мы, конечно, можем вписать сюда тип int, но в этом случае дебаггер будет игнорировать все, что связано с этим типом данных. Это не есть правильно.
Раз сильные мира сего регистрируют тут свои типы данных, для корректной обработки, значит, мы просто обязаны создать свой тип данных, отвечающий за исключения.
Назовем его TCustomException. Кликаем по Add, и вписываем это в строчку диалога. Потом щелкаем OK. Все, поздравляю дамы и господа! Мы успешно зарегистрировали тип данных. То есть теперь дебаггер не будет обижаться на то, что мы используем для генерации исключений что-то, о чем он не знает.
Итак, уходим из опций дебаггера, и возвращаемся в программу.
Изменим код.
Пример №2
сlass TCustomException{}; // Наш тип данных
TCustomException NewEx; // Объекткласса (типа) TCustomException
try // Начало блока создания исключений
{
throw NewEx; //Создание исключения
}
catch(TCustomException) // Начало блока отлова исключений
{
MessageDlg("Exception!!!",mtError, TMsgDlgButtons() << mbOK, 0); //Сообщение
};
Поскольку классы являются типами данных, мы без труда создаем свой TCustomException. Однако, неудобно создавать под каждое новое исключение – новый класс. Так что лучше создать объект класса TCustomException, что мы и делаем. Создаем объект NewEx, и используем его для создания исключения, которое потом с успехом отлавливается. В остальном конструкция работает так же, как вышеописанная, с той разницей, что она работает!
Однако, подобная конструкция тоже имеет проблемы. В случае более-менее сложной ситуации, нам придется выстраивать целые иерархии исключений. Чтобы этого не допускать, лучше пользоваться исключениями с параметрами.
Пример №3
//Класс для исключений с параметрами.
//Не забывать регистрировать его в опциях дебаггера!
class TEx
{
public:
int fCode;
TEx(int eCode){fCode=eCode;};
};
// Код, встроенный в клавишу Button1
try
{
throw TEx(1301);
}
catch(TEx Ex)
{
if(Ex.fCode==1301){
MessageDlg("Exception!", mtError, mbOKCancel, 0);
};
}
Иными словами, можно внутри рабочего алгоритма создавать исключения в любой непонравившейся вам ситуации, а затем в обработчике исключений, решать – что делать в каждом конкретном случае. Просто, удобно и надежно. Какие милые люди работают в Borland!
Надеюсь, эта статья поможет интересующимся в их неравном бою с замечательным (да, я на самом деле так считаю!) инструментом – Borland C++ Builder 6.0
Заев А.А.