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