Freigeben über


syntax Exception-Handler

Die schlüsselwörter __try und __except werden verwendet, um einen framebasierten Ausnahmehandler zu erstellen. Das folgende Beispiel zeigt die Struktur eines Ausnahmehandlers.

__try 
{
    // guarded body of code 
 
} 
__except (filter-expression) 
{ 
    // exception-handler block 
 
}

Beachten Sie, dass der __try-Block und der Ausnahmehandlerblock geschweifte Klammern ({}) erfordern. Die Verwendung einer goto-Anweisung, um in den Textkörper eines __try Blocks oder in einen Ausnahmehandlerblock zu springen, ist nicht zulässig. Diese Regel gilt sowohl für Ausnahmehandler als auch für Beendigungshandler.

Der __try-Block enthält den geschützten Codetext, den der Ausnahmehandler schützt. Eine Funktion kann eine beliebige Anzahl von Ausnahmehandlern aufweisen, und diese Ausnahmebehandlungsanweisungen können in derselben Funktion oder in unterschiedlichen Funktionen geschachtelt werden. Wenn innerhalb des __try-Blocks eine Ausnahme auftritt, übernimmt das System die Steuerung und beginnt mit der Suche nach einem Ausnahmehandler. Eine detaillierte Beschreibung dieser Suche finden Sie unter Ausnahmebehandlung.

Der Ausnahmehandler empfängt nur Ausnahmen, die innerhalb eines einzelnen Threads auftreten. Dies bedeutet: Wenn ein __try-Block einen Aufruf des CreateProcess oder CreateThread--Funktion enthält, werden Ausnahmen, die innerhalb des neuen Prozesses oder Threads auftreten, nicht an diesen Handler verteilt.

Das System wertet den Filterausdruck jedes Ausnahmehandlers aus, der den Code schützt, in dem die Ausnahme aufgetreten ist, bis entweder die Ausnahme behandelt wird oder es keine weiteren Handler gibt. Ein Filterausdruck muss als einer der drei folgenden Werte ausgewertet werden.

Wert Bedeutung
EXCEPTION_EXECUTE_HANDLER Das System überträgt die Steuerung an den Ausnahmehandler, und die Ausführung wird im Stapelframe fortgesetzt, in dem der Handler gefunden wird.
EXCEPTION_CONTINUE_SEARCH Das System sucht weiterhin nach einem Handler.
EXCEPTION_CONTINUE_EXECUTION Das System beendet die Suche nach einem Handler und gibt das Steuerelement an den Punkt zurück, an dem die Ausnahme aufgetreten ist. Wenn die Ausnahme nicht fähig ist, führt dies zu einer EXCEPTION_NONCONTINUABLE_EXCEPTION Ausnahme.

 

Der Filterausdruck wird im Kontext der Funktion ausgewertet, in der sich der Ausnahmehandler befindet, obwohl die Ausnahme möglicherweise in einer anderen Funktion aufgetreten ist. Dies bedeutet, dass der Filterausdruck auf die lokalen Variablen der Funktion zugreifen kann. Ebenso kann der Ausnahmehandlerblock auf die lokalen Variablen der Funktion zugreifen, in der sie sich befindet.

Weitere Beispiele finden Sie unter Verwenden eines Ausnahmehandlers.

Weitere Informationen zu Filterausdrücken und Filterfunktionen finden Sie unter framebasierte Ausnahmebehandlung.