Compartir a través de


CATCH

Define un bloque de código que detecte el primer tipo de excepción se produce en el bloque Try anterior.

CATCH(exception_class, exception_object_pointer_name )

Parámetros

  • exception_class
    Especifica el tipo de excepción para probar.Para obtener una lista de clases de excepción estándar, vea la clase CException.

  • exception_object_pointer_name
    Especifica un nombre para un puntero de objeto de excepción creado por la macro.Puede utilizar el nombre del puntero para tener acceso al objeto de excepción dentro del bloque Catch.Esta variable se declara para usted.

Comentarios

El código de excepción-procesamiento puede interrogar al objeto de excepción, si es necesario, para obtener más información sobre la causa concreta de la excepción.Invoca la macro de THROW_LAST para desplazar el procesamiento al cuadro externo siguiente de la excepción.Termine el bloque Try con una macro de END_CATCH .

Si los exception_class son la clase CException, se detectan a todos los tipos de excepción.Puede utilizar la función miembro de CObject::IsKindOf para determinar qué excepción concreta se produjo.La mejor manera de detectar varias clases de excepciones es utilizar instrucciones secuenciales de AND_CATCH , cada uno con otro tipo de excepción.

El puntero de objeto de excepción es creado por la macro.No necesita declararlo personalmente.

[!NOTA]

El bloque Catch se define como ámbito de C++. antes de llaves.Si declara variables en este ámbito, son accesibles únicamente dentro de ese ámbito.Esto también se aplica a exception_object_pointer_name.

Para obtener más información sobre excepciones y la macro de CATCH , vea el artículo Excepciones.

Ejemplo

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;
}

Requisitos

Header: afx.h

Vea también

Referencia

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

CException (Clase)

Conceptos

Macros y funciones globales de MFC