Strategien zur Fehlerbehandlung

Da Schnittstellenmethoden virtuell sind, ist es für einen Aufrufer nicht möglich, den vollständigen Satz von Werten zu kennen, die von einem einzelnen Aufruf zurückgegeben werden können. Eine Implementierung einer Methode kann fünf Werte zurückgeben. ein anderer kann acht zurückgeben.

In der Dokumentation sind allgemeine Werte aufgeführt, die für jede Methode zurückgegeben werden können. Dies sind die Werte, die Sie im Code überprüfen und behandeln müssen, da sie eine besondere Bedeutung haben. Andere Werte werden möglicherweise zurückgegeben, aber da sie nicht sinnvoll sind, müssen Sie keinen speziellen Code schreiben, um sie zu behandeln. Eine einfache Überprüfung auf null oder ungleich Null ist ausreichend.

HRESULT-Werte

Der Rückgabewert von COM-Funktionen und -Methoden ist ein HRESULT. Die Werte einiger HRESULTs wurden in COM geändert, um jegliche Duplizierung und Überlappung mit den Systemfehlercodes zu vermeiden. Diejenigen, die Systemfehlercodes duplizieren, wurden in FACILITY_WIN32 geändert, und diejenigen, die sich überschneiden, verbleiben in FACILITY_NULL. Allgemeine HRESULT-Werte und deren Werte sind in der folgenden Tabelle aufgeführt.

HRESULT Wert BESCHREIBUNG
E_ABORT
0x80004004
Der Vorgang wurde aufgrund eines nicht angegebenen Fehlers abgebrochen.
E_ACCESSDENIED
0x80070005
Ein allgemeiner Fehler, der zugriff verweigert wurde.
E_FAIL
0x80004005
Ein nicht angegebener Fehler ist aufgetreten.
E_HANDLE
0x80070006
Es wurde ein ungültiges Handle verwendet.
E_INVALIDARG
0x80070057
Mindestens ein Argument ist ungültig.
E_NOINTERFACE
0x80004002
Die QueryInterface-Methode hat die angeforderte Schnittstelle nicht erkannt. Die Schnittstelle wird nicht unterstützt.
E_NOTIMPL
0x80004001
Die Methode ist nicht implementiert.
E_OUTOFMEMORY
0x8007000E
Die -Methode konnte den erforderlichen Arbeitsspeicher nicht zuordnen.
E_PENDING
0x8000000A
Die zum Abschließen des Vorgangs erforderlichen Daten sind noch nicht verfügbar.
E_POINTER
0x80004003
Ein ungültiger Zeiger wurde verwendet.
E_UNEXPECTED
0x8000FFFF
Es ist ein schwerwiegender Fehler aufgetreten.
S_FALSE
0x00000001
Die Methode war erfolgreich und hat den booleschen Wert FALSE zurückgegeben.
S_OK
0x00000000
Die Methode wurde erfolgreich ausgeführt. Wenn ein boolescher Rückgabewert erwartet wird, ist der zurückgegebene Wert TRUE.

Netzwerkfehler

Wenn die ersten vier Ziffern des Fehlercodes 8007 sind, weist dies auf einen System- oder Netzwerkfehler hin. Sie können den Net-Befehl verwenden, um diese Fehlertypen zu decodieren. Um den Fehler zu decodieren, konvertieren Sie zuerst die letzten vier Ziffern des hexadezimalen Fehlercodes in dezimal. Geben Sie dann an der Eingabeaufforderung Folgendes ein, wobei dezimaler Code durch den Rückgabewert ersetzt wird, den Sie decodieren möchten:

net helpmsg <decimal_code>

Der Net-Befehl gibt eine Beschreibung des Fehlers zurück. Wenn COM beispielsweise den Fehler 8007054B zurückgibt, konvertieren Sie 054B in dezimal (1355). Geben Sie anschließend Folgendes ein:

net helpmsg 1355

Der Befehl net gibt die Fehlerbeschreibung zurück: "Die angegebene Domäne war nicht vorhanden".

Fehlerbehandlung in COM