CATCH

Definisce un blocco di codice che intercetta il primo tipo di eccezione generata nel blocco try precedente.

CATCH(exception_class, exception_object_pointer_name )

Parametri

  • exception_class
    Specifica il tipo di eccezione da verificare.Per un elenco delle classi standard di eccezione, vedere la classe CException.

  • exception_object_pointer_name
    Specificare un nome per un puntatore dell'oggetto eccezione che verrà creato la macro.È possibile utilizzare il nome del puntatore per accedere all'oggetto eccezione all'interno del blocco catch.Questa variabile viene dichiarata automaticamente.

Note

Il codice di elaborazione delle eccezioni può interrogare l'oggetto eccezione, se richiesto, per ottenere ulteriori informazioni sulla causa specifica dell'eccezione.Richiamare la macro di THROW_LAST per scorrere l'elaborazione al frame esterno dell'eccezione.Terminare il blocco di TRY con una macro di END_CATCH .

Se i exception_class è la classe CException, quindi tutti i tipi di eccezioni verranno intercettati.È possibile utilizzare la funzione membro di CObject::IsKindOf per determinare quale eccezione specifica è stata generata un'eccezione.Una migliore per intercettare diversi tipi di eccezioni è utilizzare le istruzioni sequenziali di AND_CATCH , ciascuno con un tipo diverso.

Il puntatore dell'oggetto eccezione viene creato dalla macro.Non è necessario dichiararlo manualmente.

[!NOTA]

Il blocco catch viene definito come ambito C++ delineato da parentesi graffe.Se si dichiarano variabili in questo ambito, sono accessibili solo all'interno di tale ambito.Si applica anche a exception_object_pointer_name.

Per ulteriori informazioni sulle eccezioni e sulla macro di CATCH , vedere l'articolo eccezioni.

Esempio

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

Requisiti

Header: afx.h

Vedere anche

Riferimenti

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

Classe CException

Concetti

Macro MFC e Globals