Freigeben über


CATCH

Definiert einen Codeblock, der den ersten Ausnahmetyp abfängt, der im vorherigen TRY-Block ausgelöst wird.

CATCH(exception_class, exception_object_pointer_name )

Parameter

  • exception_class
    Gibt den Ausnahmetyp an, um zu testen. Eine Liste von Standardausnahmeklassen, Klasse finden Sie unter CException.

  • exception_object_pointer_name
    Gibt einen Namen für einen Ausnahmeobjektzeiger an, der durch das Makro erstellt wird. Sie können den Zeigernamen verwenden, um auf das Ausnahmeobjekt innerhalb des Blocks CATCH zuzugreifen. Diese Variable wird für Sie deklariert.

Hinweise

Der Ausnahme-verarbeitende Code kann das Ausnahmeobjekt verhören, wenn äquivalent, um weitere Informationen zur Ursache der bestimmte Ausnahme abrufen. Rufen Sie das Makro THROW_LAST auf, um die Verarbeitung in den folgenden äußeren Ausnahmeframen zu verschieben. Beenden Sie den TRY-Block mit einem Makro END_CATCH.

Wenn exception_class die-Klasse CException ist, dann werden alle Ausnahmetypen abgefangen. Sie können die CObject::IsKindOf-Memberfunktion verwenden, um zu bestimmen, die spezifische Ausnahme ausgelöst wurde. Eine bessere Methode, mehrere Arten von Ausnahmen abzufangen ist, sequenzielle AND_CATCH-Anweisungen, jede mit einem anderen Ausnahmetyp.

Der Ausnahmeobjektzeiger wird durch das Makro erstellt. Sie müssen nicht, ihn zu deklarieren.

Hinweis

Der Block CATCH wird z Bereich einer C++-Datei definiert, der von geschweiften Klammern getrennt ist.Wenn Sie Variablen in diesem Bereich deklarieren, sind sie nur innerhalb dieses Bereichs zugänglich.Dies gilt auch für exception_object_pointer_name zu.

Weitere Informationen zu Ausnahmen und das CATCH-Makro, finden Sie im Artikel Ausnahmen.

Beispiel

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

Anforderungen

Header: afx.h

Siehe auch

Referenz

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

CException-Klasse

Konzepte

MFC-Makros, globale Funktionen und globale Variablen