GetExceptionCode-Makro
Ruft einen Code ab, der den Typ der auftretenden Ausnahme identifiziert. Die Funktion kann nur innerhalb des Filterausdrucks- oder Ausnahmehandlerblocks eines Ausnahmehandlers aufgerufen werden.
Hinweis
Der Microsoft C/C++-Optimierungscompiler interpretiert diese Funktion als Schlüsselwort (keyword), und ihre Verwendung außerhalb der entsprechenden Ausnahmebehandlungssyntax generiert einen Compilerfehler.
Syntax
DWORD GetExceptionCode(void);
Parameter
Dieses Makro verfügt über keine Parameter.
Rückgabewert
Der Rückgabewert gibt den Ausnahmetyp an. In der folgenden Tabelle sind die Ausnahmecodes aufgeführt, die aufgrund häufiger Programmierfehler auftreten können. Diese Werte werden in WinBase.h und WinNT.h definiert.
Rückgabecode | Beschreibung |
---|---|
|
Der Thread versucht, aus einer virtuellen Adresse zu lesen oder in eine virtuelle Adresse zu schreiben, auf die er keinen Zugriff hat. Dieser Wert ist als STATUS_ACCESS_VIOLATION definiert. |
|
Der Thread versucht, auf ein Arrayelement zuzugreifen, das außerhalb der Grenzen liegt, und die zugrunde liegende Hardware unterstützt die Begrenzungsüberprüfung. Dieser Wert ist als STATUS_ARRAY_BOUNDS_EXCEEDED definiert. |
|
Es wird ein Haltepunkt gefunden. Dieser Wert ist als STATUS_BREAKPOINT definiert. |
|
Der Thread versucht, Daten zu lesen oder zu schreiben, die auf Hardware, die keine Ausrichtung bietet, falsch ausgerichtet sind. Beispielsweise müssen 16-Bit-Werte an 2-Byte-Grenzen, 32-Bit-Werten an 4-Byte-Grenzen usw. ausgerichtet werden. Dieser Wert ist als STATUS_DATATYPE_MISALIGNMENT definiert. |
|
Einer der Operanden in einem Gleitkommavorgang ist denormal. Ein Denormalwert ist zu klein, um als Standard-Gleitkommawert darzustellen. Dieser Wert ist als STATUS_FLOAT_DENORMAL_OPERAND definiert. |
|
Der Thread versucht, einen Gleitkommawert durch einen Gleitkommateiler von 0 (Null) zu dividieren. Dieser Wert ist als STATUS_FLOAT_DIVIDE_BY_ZERO definiert. |
|
Das Ergebnis eines Gleitkommavorgangs kann nicht genau als Dezimalbruch dargestellt werden. Dieser Wert ist als STATUS_FLOAT_INEXACT_RESULT definiert. |
|
Eine Gleitkomma-Ausnahme, die nicht in dieser Liste enthalten ist. Dieser Wert ist als STATUS_FLOAT_INVALID_OPERATION definiert. |
|
Der Exponent eines Gleitkommavorgangs ist größer als die vom entsprechenden Typ zulässige Größe. Dieser Wert wird als STATUS_FLOAT_OVERFLOW definiert. |
|
Der Stapel ist aufgrund eines Gleitkommavorgangs über- oder unterfließt. Dieser Wert ist als STATUS_FLOAT_STACK_CHECK definiert. |
|
Der Exponent eines Gleitkommavorgangs ist kleiner als die vom entsprechenden Typ zulässige Größe. Dieser Wert ist als STATUS_FLOAT_UNDERFLOW definiert. |
|
Der Thread hat auf den Arbeitsspeicher zugegriffen, der mit dem PAGE_GUARD-Modifizierer zugeordnet ist. Dieser Wert ist als STATUS_GUARD_PAGE_VIOLATION definiert. |
|
Der Thread versucht, eine ungültige Anweisung auszuführen. Dieser Wert ist als STATUS_ILLEGAL_INSTRUCTION definiert. |
|
Der Thread versucht, auf eine Seite zuzugreifen, die nicht vorhanden ist, und das System kann die Seite nicht laden. Diese Ausnahme kann beispielsweise auftreten, wenn eine Netzwerkverbindung während der Ausführung eines Programms über ein Netzwerk unterbrochen wird. Dieser Wert ist als STATUS_IN_PAGE_ERROR definiert. |
|
Der Thread versucht, einen ganzzahligen Wert durch einen ganzzahligen Divisor von 0 (Null) zu dividieren. Dieser Wert ist als STATUS_INTEGER_DIVIDE_BY_ZERO definiert. |
|
Das Ergebnis eines ganzzahligen Vorgangs erstellt einen Wert, der zu groß ist, um vom Zielregister gespeichert zu werden. In einigen Fällen führt dies zu einer Durchführung des wichtigsten Teils des Ergebnisses. Bei einigen Vorgängen wird das Carry-Flag nicht festgelegt. Dieser Wert ist als STATUS_INTEGER_OVERFLOW definiert. |
|
Ein Ausnahmehandler gibt eine ungültige Disposition an den Ausnahmeverteiler zurück. Programmierer, die eine allgemeine Sprache wie C verwenden, sollten niemals auf diese Ausnahme stoßen. Dieser Wert wird als STATUS_INVALID_DISPOSITION definiert. |
|
Der Thread verwendet ein Handle für ein Kernelobjekt, das ungültig war (wahrscheinlich, weil es geschlossen wurde).) Dieser Wert wird als STATUS_INVALID_HANDLE definiert. |
|
Der Thread versucht, die Ausführung fortzusetzen, nachdem eine nicht fortlaufende Ausnahme auftritt. Dieser Wert ist als STATUS_NONCONTINUABLE_EXCEPTION definiert. |
|
Der Thread versucht, eine Anweisung mit einem Vorgang auszuführen, der im aktuellen Computermodus nicht zulässig ist. Dieser Wert ist als STATUS_PRIVILEGED_INSTRUCTION definiert. |
|
Eine Ablaufverfolgungsfalle oder ein anderer einzelner Anweisungsmechanismus signalisiert, dass eine Anweisung ausgeführt wird. Dieser Wert ist als STATUS_SINGLE_STEP definiert. |
|
Der Thread verwendet seinen Stapel. Dieser Wert ist als STATUS_STACK_OVERFLOW definiert. |
|
Eine Framekonsolidierung wurde ausgeführt. |
Bemerkungen
Die GetExceptionCode-Funktion kann nur innerhalb des Filterausdrucks oder Ausnahmehandlerblocks eines Ausnahmehandlers aufgerufen werden. Der Filterausdruck wird ausgewertet, wenn während der Ausführung des __try blocks eine Ausnahme auftritt und bestimmt, ob der __except Block ausgeführt wird.
Der Filterausdruck kann eine Filterfunktion aufrufen. Die Filterfunktion kann GetExceptionCode nicht aufrufen. Der Rückgabewert von GetExceptionCode kann jedoch als Parameter an eine Filterfunktion übergeben werden. Der Rückgabewert der GetExceptionInformation-Funktion kann auch als Parameter an eine Filterfunktion übergeben werden. GetExceptionInformation gibt einen Zeiger auf eine Struktur zurück, die die Ausnahmecodeinformationen enthält.
Wenn geschachtelte Handler vorhanden sind, wird jeder Filterausdruck ausgewertet, bis einer als EXCEPTION_EXECUTE_HANDLER oder EXCEPTION_CONTINUE_EXECUTION ausgewertet wird. Jeder Filterausdruck kann GetExceptionCode aufrufen, um den Ausnahmecode abzurufen.
Der zurückgegebene Ausnahmecode ist der von einer Hardwareausnahme generierte Code oder der Code, der in der RaiseException-Funktion für eine softwaregenerierte Ausnahme angegeben ist.
Beim Behandeln der Breakpointausnahme ist es wichtig, den Anweisungszeiger im Kontextdatensatz inkrementieren, um von dieser Ausnahme fortzufahren.
Beispiele
Ein Beispiel finden Sie unter Verwenden eines Ausnahmehandlers.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) |
Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) |
Windows Server 2003 [nur Desktop-Apps] |
Weitere Informationen