다음을 통해 공유


CATCH

연이어 발생 하는 첫 번째 예외 형식을 catch 하는 코드 블록을 정의 합니다. 시도 블록.

CATCH(exception_class, exception_object_pointer_name )

매개 변수

  • exception_class
    테스트에 대 한 예외 형식을 지정 합니다.표준 예외 클래스 목록은 클래스를 참조 하십시오. CException.

  • exception_object_pointer_name
    매크로 바이러스가 만들어질 예외 개체 포인터의 이름을 지정 합니다.포인터 이름 사용 하 여 예외 개체에 액세스할 수 있는 CATCH 블록.이 변수를 선언 합니다.

설명

예외 처리 코드 예외 개체를 적절 한 경우 예외의 특정 원인에 대 한 자세한 내용을 보려면 검색할 수 있습니다.호출을 THROW_LAST 매크로 처리 다음 외부 예외 프레임으로 이동 합니다.끝의 시도 차단에 END_CATCH 매크로.

경우 exception_class 클래스는 CException, 모든 예외 형식을 catch 하 고 있습니다.사용할 수 있는 CObject::IsKindOf 멤버 함수는 특정 예외가 throw 된 확인 합니다.순차적으로 사용 하는 것이 여러 종류의 예외를 catch 하는 더 좋은 방법은 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;
}

요구 사항

헤더: afx.h

참고 항목

참조

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

CException 클래스

개념

MFC 매크로 전역