CATCH
Define um bloco de código que captura o primeiro tipo de exceção emitido no anteriorTENTE bloco.
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 de exceção padrão, consulte classe CException.exception_object_pointer_name
Especifica um nome para um ponteiro de objeto de exceção que será criado pela macro.Você pode usar o nome de ponteiro para acessar o objeto de exceção dentro de CATCH bloco.Essa variável é declarada para você.
Comentários
O código de processamento de exceção pode interrogar o objeto de exceção, se apropriado, para obter mais informações sobre a causa específica da exceção.Invocar o THROW_LAST macro para deslocar o processamento para o próximo quadro exceção externa. Finalizar o TENTE bloco com um END_CATCH macro.
If exception_class é a classe CException, e, em seguida, todos os tipos de exceção poderá ser detectados. Você pode usar o CObject::IsKindOffunção de membro para determinar qual específico de exceção foi lançado.Uma forma melhor para capturar vários tipos de exceções é usar seqüencial AND_CATCH instruções, cada um com um tipo de exceção diferente.
O indicador de objeto de exceção é criado pela macro.Você não precisa declará-lo.
Observação: |
---|
O CATCH bloco é definido sistema autônomo um escopo C++ delineado por chaves.Se você declarar variáveis nesse escopo, eles são acessíveis somente dentro desse escopo.Isso também se aplica a exception_object_pointer_name. |
Para obter mais informações sobre exceções e o CATCH macro, 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
Cabeçalho: afx.h