Behandeln von strukturierten Exceptions (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

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))

Siehe auch