Поделиться через


CATCH

Определяет блок кода, который перехватывает первый тип исключения, предшествующий в блок TRY.

CATCH(exception_class, exception_object_pointer_name )

Параметры

  • exception_class
    Задает тип исключения для выполнения для. Классы исключений Для списка стандартных класс см. в разделе CException.

  • exception_object_pointer_name
    Задает имя для указателя исключений объекта, который будет создан макросом. Можно использовать имя указателя получить объект исключения в блоке CATCH. Эта переменная объявлена автоматически.

Заметки

Код обработки исключений может опросить объект исключения, если это возможно, чтобы получить дополнительные сведения об определенной причине исключения. Вызвать макрос 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

См. также

Ссылки

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

Класс CException

Основные понятия

Макросы и глобальные объекты MFC