ERFASSUNG
Definiert einen Codeblock, der den ersten Ausnahmetyp abfängt, der in den 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 der standardmäßigen ausnahme Klassen finden Sie unter CException-Klasse.exception_object_pointer_name
Gibt einen Zeiger auf das Ausnahmeobjekt für einen Namen an, der durch das Makro erstellt wird.Sie können den Namen der Zeiger verwenden, um das Ausnahmeobjekt innerhalb des CATCH-Blocks zuzugreifen.Diese Variable deklariert wird.
Hinweise
Der Code Ausnahme-verarbeitende das Ausnahmeobjekt kann abgefragt wird, falls erforderlich, um weitere Informationen über die spezifische Ursache der Ausnahme ab.Rufen Sie das Makro THROW_LAST auf, um die Verarbeitung an den nächsten äußeren Ausnahme framen zu verschieben.Beenden Sie den TRY-Block mit einem END_CATCH Makro.
Wenn exception_class die Klasse CException ist, werden alle Ausnahmetypen abgefangen.Sie können die CObject::IsKindOf-Memberfunktion verwenden, um zu bestimmen, welche spezifische Ausnahme ausgelöst wurde.Eine bessere Möglichkeit, mehrere Arten von Ausnahmen abzufangen ist, sequenzielle AND_CATCH einzelnen Anweisungen für die Verwendung mit einem anderen Ausnahmetyp.
Der Zeiger auf das Ausnahmeobjekt wird durch das Makro erstellt.Sie müssen nicht um ihn zu deklarieren.
Hinweis |
---|
Der CATCH Ein C++-Compiler Block wird als Bereich definiert, der von geschweiften Klammern abgegrenzt wird.Wenn Sie in diesem Bereich Variablen deklariert werden, sind sie nur innerhalb dieses Bereichs zugegriffen werden.Dies gilt auch für exception_object_pointer_name. |
Weitere Informationen über 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