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".