Struktur von COM-Fehlercodes

Die folgende Abbildung zeigt das Format eines HRESULT (oder SCODE); Die Zahlen geben Bitpositionen an:

Zeigt das Format eines

Das Bit in hoher Reihenfolge im HRESULT oder SCODE gibt an, ob der Rückgabewert Erfolg oder Fehler darstellt. Wenn dieser Wert auf 0 festgelegt ist, SEVERITY_SUCCESS, gibt der Wert erfolg an. Wenn dieser Wert auf 1 festgelegt ist, SEVERITY_ERROR, weist dies auf einen Fehler hin.

Die R-, C-, N- und r-Bits sind reserviert.

Das Feld facility gibt den systemdienst an, der für den Fehler verantwortlich ist. Microsoft weist neue Einrichtungscodes zu, sobald sie erforderlich werden. Die meisten SCODEs- und HRESULT-Werte legen das Facility-Feld auf FACILITY_ITF fest, was einen Schnittstellenmethodenfehler angibt.

Allgemeine Facility-Felder werden in der folgenden Tabelle beschrieben.

Facility Field Wert BESCHREIBUNG
FACILITY_DISPATCH
2
Bei IDispatch-Schnittstellenfehlern bei später Bindung.
FACILITY_ITF
4
Für die meisten status Codes, die von Schnittstellenmethoden zurückgegeben werden. Die tatsächliche Bedeutung des Fehlers wird durch die -Schnittstelle definiert. Das heißt, zwei HRESULT-Instanzenmit genau demselben 32-Bit-Wert, die von zwei verschiedenen Schnittstellen zurückgegeben werden, können unterschiedliche Bedeutungen haben.
FACILITY_NULL
0
Für allgemein anwendbare allgemeine status Codes wie S_OK.
FACILITY_RPC
1
Für status Codes, die von Remoteprozeduraufrufen zurückgegeben werden.
FACILITY_STORAGE
3
Für status Codes, die von IStorage- oder IStream-Methodenaufrufen zurückgegeben werden, die sich auf strukturierten Speicher beziehen. Statuscodes, deren Codewert (unter 16 Bit) im Bereich von MS-DOS-Fehlercodes liegt (d. h. kleiner als 256), haben dieselbe Bedeutung wie der entsprechende MS-DOS-Fehler.
FACILITY_WIN32
7
Wird verwendet, um ein Mittel zur Behandlung von Fehlercodes aus Funktionen in der Windows-API als HRESULT bereitzustellen. Fehlercodes in 16-Bit-OLE, die Systemfehlercodes dupliziert haben, wurden ebenfalls in FACILITY_WIN32 geändert.
FACILITY_WINDOWS
8
Wird für zusätzliche Fehlercodes von von Microsoft definierten Schnittstellen verwendet.

Das Codefeld ist eine eindeutige Zahl, die zugewiesen ist, um den Fehler oder die Warnung darzustellen.

Gemäß der Konvention haben HRESULT-Werte in der Regel Namen im folgenden Format: Facility_Severity_Reason.

Die Fazilität ist entweder der Name der Einrichtung oder ein anderer Unterscheidungsbezeichner; Der Schweregrad ist ein einzelner Buchstabe (S oder E), der angibt, ob der Funktionsaufruf erfolgreich war (S) oder ob ein Fehler (E) erzeugt wurde. und Reason ist ein Bezeichner, der die Bedeutung des Codes beschreibt. Der status Code STG_E_FILENOTFOUND weist beispielsweise darauf hin, dass ein speicherbezogener Fehler aufgetreten ist. Insbesondere ist keine angeforderte Datei vorhanden. Statuscodes von FACILITY_NULL lassen das Präfix Facility_ aus.

Fehlercodes werden im Kontext einer Schnittstellenimplementierung definiert. Nach der Definition können Erfolgscodes nicht mehr geändert oder neue Erfolgscodes hinzugefügt werden. Es können jedoch neue Fehlercodes geschrieben werden. Microsoft behält sich das Recht vor, neue Fehlercodes (aber keine Erfolgscodes) für die unter FACILITY_ITF oder in neuen Einrichtungen beschriebenen Schnittstellen zu definieren.

Fehlerbehandlung in COM

Windows-Protokolle: HRESULT