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, und seine 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 identifiziert den Typ der Ausnahme. 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 Begrenzungsprüfung. Dieser Wert ist als STATUS _ ARRAY _ BOUNDS _ EXCEEDED definiert. |
|
Ein Haltepunkt wird gefunden. Dieser Wert ist als STATUS _ BREAKPOINT definiert. |
|
Der Thread versucht, Daten zu lesen oder zu schreiben, die auf Hardware falsch ausgerichtet sind, die keine Ausrichtung bereitstellt. Beispielsweise müssen 16-Bit-Werte an 2-Byte-Grenzen, 32-Bit-Werte 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 dargestellt zu werden. 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 einer Gleitkommaoperation kann nicht genau als Dezimalbruch dargestellt werden. Dieser Wert ist als STATUS _ FLOAT _ INEXACT _ RESULT definiert. |
|
Eine Gleitkommaausnahme, 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 Größe, die vom entsprechenden Typ zulässig ist. Dieser Wert ist als STATUS _ FLOAT _ OVERFLOW definiert. |
|
Der Stapel ist aufgrund eines Gleitkommavorgangs über- oder unterlaufen. 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, auf den mit dem PAGE GUARD-Modifizierer belegter Arbeitsspeicher zugegriffen _ wurde. 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 beim Ausführen eines Programms über ein Netzwerk eine Netzwerkverbindung 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 einer ganzzahligen Operation erstellt einen Wert, der zu groß ist, um vom Zielregister gehalten zu werden. In einigen Fällen führt dies dazu, dass das wichtigste Teil des Ergebnisses ausgeführt wird. 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 Ausnahme dispatcher zurück. Programmierer, die eine high-level-Sprache wie C verwenden, sollten diese Ausnahme nie stoßen. Dieser Wert ist als STATUS _ INVALID _ DISPOSITION definiert. |
|
Der Thread hat ein Handle für ein ungültiges Kernelobjekt verwendet (wahrscheinlich, weil es geschlossen wurde). Dieser Wert ist als STATUS _ INVALID _ HANDLE definiert. |
|
Der Thread versucht, die Ausführung fortzusetzen, nachdem eine nicht zusammenhängende Ausnahme aufgetreten ist. 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. |
|
Ein 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 Rahmenkonsolidierung 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 _ _ ausnahme-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 durch eine 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 zu erhöhen, um mit dieser Ausnahme fortzufahren.
Beispiele
Ein Beispiel finden Sie unter Verwenden eines Ausnahmehandlers.
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows Nur [ XP-Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Nur Server [ 2003-Desktop-Apps] |