Freigeben über


Strategien zur Fehlerbehandlung

Da Schnittstellenmethoden virtuell sind, ist es für einen Aufrufer nicht möglich, den vollständigen Wertesatz zu kennen, der von einem Aufruf zurückgegeben werden kann. 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 in Ihrem Code überprüfen und behandeln müssen, da sie besondere Bedeutungen haben. Andere Werte können zurückgegeben werden, aber da sie nicht aussagekräftig sind, müssen Sie keinen speziellen Code schreiben, um sie zu behandeln. Eine einfache Überprüfung auf Null oder Nonzero 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 alle Duplizierungen und Überschneidungen mit den Systemfehlercodes zu beseitigen. Diejenigen, die doppelte Systemfehlercodes in FACILITY_WIN32 geändert wurden, und diejenigen, die sich überschneiden, bleiben 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 Zugriff verweigerter Fehler.
E_FAIL
0x80004005
Ein nicht angegebener Fehler ist aufgetreten.
E_HANDLE
0x80070006
Ein ungültiger Handle wurde 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
Ein katastrophaler Fehler ist aufgetreten.
S_FALSE
0x00000001
Die Methode war erfolgreich und hat den booleschen Wert FALSEzurückgegeben.
S_OK
0x00000000
Die Methode war erfolgreich. Wenn ein boolescher Rückgabewert erwartet wird, ist der zurückgegebene Wert TRUE.

Netzwerkfehler

Wenn die ersten vier Ziffern des Fehlercodes 8007 sind, gibt dies einen System- oder Netzwerkfehler an. Sie können den Befehl net verwenden, um diese Fehlertypen zu decodieren. Um den Fehler zu decodieren, konvertieren Sie zuerst die letzten vier Ziffern des Hexadezimalfehlercodes in eine Dezimalzahl. 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 dann Folgendes ein:

net helpmsg 1355

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

Fehlerbehandlung in COM-