CATCH
Указывает блок кода, который перехватывает первый тип исключения в блоке " штриховой TRY.
CATCH(exception_class, exception_object_pointer_name )
Параметры
exception_class
Указывает тип исключения для проверки.Список стандартных классов исключений см. в описании класса CException.exception_object_pointer_name
Определяет имя для указателя исключение-объекта, который будет создан макроса.Можно использовать имя индекса, чтобы получить доступ к объекту исключения в блоке CATCH.Эта переменная объявлена.
Заметки
Исключение-обрабатывая код может запрашивать объект исключения, если требуется, чтобы получить дополнительные сведения о конкретной причины исключения.Invoke - макрос THROW_LAST для обработки сдвигать к следующему внешнему кадру исключения.Завершает блок TRY с макросом END_CATCH.
Если exception_class класс CException, то все типы исключений будут перехвачены.Можно использовать функции-члена CObject::IsKindOf, чтобы определить, определенное исключение.Лучший способ перехватить несколько типов исключений использовать последовательные выписки AND_CATCH с другим типом исключения.
Указатель объекта исключения создании макроса.Можно объявить его вручную не нужно.
Примечание |
---|
Блок CATCH определен как область C++, определенная фигурными скобками.При объявлении переменных в этой области, они доступны только внутри этой области.Это также применяется к exception_object_pointer_name. |
Дополнительные сведения об исключениях и макросе CATCH см. в статье Исключения.
Пример
CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
TRY
{
pFile = new CFile(_T( "C:\\WINDOWS\\SYSTEM.INI"),
CFile::modeRead | CFile::shareDenyNone);
ULONGLONG dwLength = pFile->GetLength();
CString str;
str.Format(_T("Your SYSTEM.INI file is %I64u bytes long.") , dwLength);
AfxMessageBox(str);
}
CATCH(CFileException, pEx)
{
// Simply show an error message to the user.
pEx->ReportError();
}
AND_CATCH(CMemoryException, pEx)
{
// We can't recover from this memory exception, so we'll
// just terminate the app without any cleanup. Normally,
// an application should do everything it possibly can to
// clean up properly and not call AfxAbort().
AfxAbort();
}
END_CATCH
// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our cleanup code needs to test for NULL.
if (pFile != NULL)
{
pFile->Close();
delete pFile;
}
Требования
Header: afx.h