Составители:
грамму обработки исключения от программного кода, который выполняется в нормаль-
ных ситуациях.
try // начало блока try
{
<операторы основной программы> // код, в котором могут
// генерироваться исключения
}
catch( <фильтр> ) // начало блока обработки исключений
{
<код подпрограммы обработки исключений> // код, который выполняется
// при наличии исключения
}
В любой своей реализации механизм структурированной обработки исключений
связывает блок защищаемого программного кода с подпрограммой обработки исключе-
ний. Если исключение происходит при выполнении защищаемого блока, управление пе-
редается фильтрующему выражению. Последнее обычно определяет тип исключения и
принимает решение о том, как продолжать его обработку. Исключения, прошедшие че-
рез фильтр, поступают в подпрограмму-обработчик. Если фильтр блокирует исключе-
ние, подпрограмма-обработчик не вызывается и система продолжает поиск процедуры,
которая возьмет на себя обработку этого исключения.
Фильтрующее выражение может быть достаточно сложным. При необходимости
оно может даже вызывать отдельную функцию. Иногда фильтр сам выполняет обработ-
ку исключения, вследствие чего блок catch остается пустым. Во многих случаях для об-
работки исключительных ситуаций применяются MFC-класс CException и производные
от него классы. Каждый из классов этой группы предназначен для обработки опреде-
ленных типов исключений (таблица 3.2).
Таблица 3.2
Класс Описание
CMemoryException Исключение, вызванное нехваткой памяти
CNotSupportedException Запрос недопустимой операции
CArchiveException Исключение при работе с архивами
CFileException Исключение при выполнении операций с файлами
CResourceException Ресурс не обнаружен или не может быть создан
COleException OLE-исключение
CDBException Исключение, возникающее при выполнении операций с база-
ми данных; генерируется ODBC-классами библиотеки MFC
COleDispatchException Ошибка диспетчеризации (OLE-автоматизации)
CUserException Исключение, связанное с невозможностью найти заданный
ресурс
CDaoException Исключение, возникающее при работе с объектами доступа к
данным (Data Access Object, DAO); генерируется DАО-
классами библиотеки MFC
CInternetException Исключение, связанное с работой в Internet; генерируется
Internet-классами библиотеки MFC
Эти исключения предназначены для использования в блоках try/catch. Обычно ка-
ждый производный класс служит для перехвата исключений определенного типа, но
можно сначала использовать класс CException, предназначенный для перехвата исклю-
чений всех типов, а затем - метод CObject::IsKindOf(), определяющий тип исключения (и
88
грамму обработки исключения от программного кода, который выполняется в нормаль-
ных ситуациях.
try // начало блока try
{
<операторы основной программы> // код, в котором могут
// генерироваться исключения
}
catch( <фильтр> ) // начало блока обработки исключений
{
<код подпрограммы обработки исключений> // код, который выполняется
// при наличии исключения
}
В любой своей реализации механизм структурированной обработки исключений
связывает блок защищаемого программного кода с подпрограммой обработки исключе-
ний. Если исключение происходит при выполнении защищаемого блока, управление пе-
редается фильтрующему выражению. Последнее обычно определяет тип исключения и
принимает решение о том, как продолжать его обработку. Исключения, прошедшие че-
рез фильтр, поступают в подпрограмму-обработчик. Если фильтр блокирует исключе-
ние, подпрограмма-обработчик не вызывается и система продолжает поиск процедуры,
которая возьмет на себя обработку этого исключения.
Фильтрующее выражение может быть достаточно сложным. При необходимости
оно может даже вызывать отдельную функцию. Иногда фильтр сам выполняет обработ-
ку исключения, вследствие чего блок catch остается пустым. Во многих случаях для об-
работки исключительных ситуаций применяются MFC-класс CException и производные
от него классы. Каждый из классов этой группы предназначен для обработки опреде-
ленных типов исключений (таблица 3.2).
Таблица 3.2
Класс Описание
CMemoryException Исключение, вызванное нехваткой памяти
CNotSupportedException Запрос недопустимой операции
CArchiveException Исключение при работе с архивами
CFileException Исключение при выполнении операций с файлами
CResourceException Ресурс не обнаружен или не может быть создан
COleException OLE-исключение
CDBException Исключение, возникающее при выполнении операций с база-
ми данных; генерируется ODBC-классами библиотеки MFC
COleDispatchException Ошибка диспетчеризации (OLE-автоматизации)
CUserException Исключение, связанное с невозможностью найти заданный
ресурс
CDaoException Исключение, возникающее при работе с объектами доступа к
данным (Data Access Object, DAO); генерируется DАО-
классами библиотеки MFC
CInternetException Исключение, связанное с работой в Internet; генерируется
Internet-классами библиотеки MFC
Эти исключения предназначены для использования в блоках try/catch. Обычно ка-
ждый производный класс служит для перехвата исключений определенного типа, но
можно сначала использовать класс CException, предназначенный для перехвата исклю-
чений всех типов, а затем - метод CObject::IsKindOf(), определяющий тип исключения (и
88
Страницы
- « первая
- ‹ предыдущая
- …
- 84
- 85
- 86
- 87
- 88
- …
- следующая ›
- последняя »
