Exception-Handler Syntax
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 für den __try-Block und den Ausnahmehandlerblock geschweifte Klammern ({}) erforderlich sind. Die Verwendung einer goto-Anweisung zum Springen in den Text eines __try-Blocks oder in einen Ausnahmehandlerblock 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 über eine beliebige Anzahl von Ausnahmehandlern verfügen, und diese Ausnahmebehandlungsanweisungen können innerhalb derselben Funktion oder in verschiedenen Funktionen geschachtelt werden. Wenn innerhalb des __try blocks eine Ausnahme auftritt, übernimmt das System die Kontrolle und beginnt mit der Suche nach einem Ausnahmehandler. Eine ausführliche Beschreibung dieser Suche finden Sie unter Ausnahmebehandlung.
Der Ausnahmehandler empfängt nur Ausnahmen, die innerhalb eines einzelnen Threads auftreten. Dies bedeutet, dass, wenn ein __try-Block einen Aufruf der CreateProcess - oder CreateThread-Funktion enthält, Ausnahmen, die innerhalb des neuen Prozesses oder Threads auftreten, nicht an diesen Handler gesendet werden.
Das System wertet den Filterausdruck jedes Ausnahmehandlers aus und schützt den Code, in dem die Ausnahme aufgetreten ist, bis entweder die Ausnahme behandelt wird oder keine Handler mehr vorhanden sind. Ein Filterausdruck muss als einer der folgenden drei Werte ausgewertet werden.
Wert | Bedeutung |
---|---|
EXCEPTION_EXECUTE_HANDLER | Das System überträgt die Steuerung an den Ausnahmehandler, und die Ausführung wird in dem 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 die Steuerung an den Punkt zurück, an dem die Ausnahme aufgetreten ist. Wenn die Ausnahme nicht inkontinuierbar ist, führt dies zu einer EXCEPTION_NONCONTINUABLE_EXCEPTION Ausnahme. |
Der Filterausdruck wird im Kontext der Funktion ausgewertet, in der sich der Ausnahmehandler befindet, auch wenn 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 er sich befindet.
Weitere Beispiele finden Sie unter Verwenden eines Ausnahmehandlers.
Weitere Informationen zu Filterausdrücken und Filterfunktionen finden Sie unter Framebasierte Ausnahmebehandlung.