Behandeln von strukturierten Exceptions (C++)
Nach oben zu Strukturierte Exceptions unter Win32 (C++)
Strukturierte Exceptions können mit einer Erweiterung der C++-Exception-Behandlung behandelt werden:
try {
foo();
}
__except (__expr__) {
// handler here
}
__expr__
ist ein Ausdruck, der zu einem der drei Werte ausgewertet wird:
Wert | Beschreibung |
---|---|
EXCEPTION_CONTINUE_SEARCH (0) | In die Behandlungsroutine wird nicht eingetreten, und das Betriebssystem sucht weiter nach einer Exception-Behandlungsroutine. |
EXCEPTION_CONTINUE_EXECUTION (-1) | Mit der Ausführung ab der Exception fortsetzen. |
EXCEPTION_EXECUTE_HANDLER (1) | In die Exception-Behandlungsroutine eintreten. Wenn der Code mit aktivierter Destruktor-Bereinigung (-xd , standardmäßig aktiviert) compiliert wurde, werden alle Destruktoren für lokale Objekte aufgerufen, die zwischen dem Auftreten der Exception und der Exception-Behandlungsroutine erstellt wurden, wenn der Stack abgewickelt wurde. Die Stack-Abwicklung wird vor dem Eintritt in die Behandlungsroutine ausgeführt.
|
#include <Windows.h>
#include <excpt.h>
int filter_func(EXCEPTION_POINTERS *);
// ...
EXCEPTION_POINTERS * xp = 0;
try {
foo();
}
__except (filter_func(xp = GetExceptionInformation())) {
// ...
}
Wenn Sie den Kommaoperator für Zuweisungen in verschachtelten Funktionsaufrufen bevorzugen, hier das entsprechende Beispiel:
__except ((xp = GetExceptionInformation()), filter_func(xp))