Compartilhar via


CATCH

Define um bloco de código que captura o primeiro tipo de exceção lançada no bloco anterior de TRY .

CATCH(exception_class, exception_object_pointer_name )

Parâmetros

  • exception_class
    Especifica o tipo de exceção para testar. Para obter uma lista de classes padrão de exceção, consulte a classe CException.

  • exception_object_pointer_name
    Especifica um nome para um ponteiro exceções gerais do objeto que é criado pela macro. Você pode usar o nome do ponteiro para acessar o objeto de exceção dentro do bloco de CATCH . Essa variável é declarada para você.

Comentários

O código de exceções gerais processamento pode interrogar o objeto de exceção, se apropriado, para obter mais informações sobre a causa específica de exceção. Invocar a macro de THROW_LAST para deslocar o processamento para o lado externo seguinte de exceção. Termine o bloco de TRY com uma macro de END_CATCH .

Se os exception_class são a classe CException, todos os tipos de exceção serão capturados. Você pode usar a função de membro de CObject::IsKindOf para determinar quais exceção específica foi gerada. Uma melhor maneira de capturar vários tipos de exceções é usar as instruções sequenciais de AND_CATCH , cada um com um tipo de exceção diferente.

O ponteiro de objeto de exceção é criado pela macro. Você não precisa declarar-lo você mesmo.

Dica

O bloco de CATCH é definido como escopo c criando inserir em por chaves.Se você declare variáveis neste escopo, só poderão ser acessados dentro desse escopo.Isso também se aplica ao exception_object_pointer_name.

Para obter mais informações sobre as exceções e de macro de CATCH , consulte o artigo Exceções.

Exemplo

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

Consulte também

Referência

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

Classe CException

Conceitos

Macros e globais MFC