Strategieën voor foutafhandeling
Omdat interfacemethoden virtueel zijn, is het niet mogelijk dat een aanroeper de volledige set waarden kent die door een aanroep kunnen worden geretourneerd. Eén implementatie van een methode kan vijf waarden retourneren; een andere kan acht retourneren.
De documentatie bevat algemene waarden die voor elke methode kunnen worden geretourneerd; dit zijn de waarden die u moet controleren en verwerken in uw code, omdat ze speciale betekenissen hebben. Andere waarden kunnen worden geretourneerd, maar omdat ze niet zinvol zijn, hoeft u geen speciale code te schrijven om ze te verwerken. Een eenvoudige controle op nul of niet-nul is voldoende.
HRESULT-waarden
De retourwaarde van COM-functies en -methoden is een HRESULT-. De waarden van sommige HRESULT's zijn gewijzigd in COM om alle duplicatie en overlapping met de systeemfoutcodes te elimineren. Die dubbele systeemfoutcodes zijn gewijzigd in FACILITY_WIN32 en die overlappen, blijven in FACILITY_NULL. Algemene HRESULT waarden en de bijbehorende waarden worden vermeld in de volgende tabel.
HRESULT | Waarde | Beschrijving |
---|---|---|
E_ABORT |
0x80004004 |
De bewerking is afgebroken vanwege een niet-opgegeven fout. |
E_ACCESSDENIED |
0x80070005 |
Een algemene fout met geweigerde toegang. |
E_FAIL |
0x80004005 |
Er is een niet-opgegeven fout opgetreden. |
E_HANDLE |
0x80070006 |
Er is een ongeldige ingang gebruikt. |
E_INVALIDARG |
0x80070057 |
Een of meer argumenten zijn ongeldig. |
E_NOINTERFACE |
0x80004002 |
De QueryInterface methode herkent de aangevraagde interface niet. De interface wordt niet ondersteund. |
E_NOTIMPL |
0x80004001 |
De methode is niet geïmplementeerd. |
E_OUTOFMEMORY |
0x8007000E |
De methode kan het benodigde geheugen niet toewijzen. |
E_PENDING |
0x8000000A |
De gegevens die nodig zijn om de bewerking te voltooien, zijn nog niet beschikbaar. |
E_POINTER |
0x80004003 |
Er is een ongeldige aanwijzer gebruikt. |
E_UNEXPECTED |
0x8000FFFF |
Er is een onherstelbare fout opgetreden. |
S_FALSE |
0x00000001 |
De methode is geslaagd en heeft de Booleaanse waarde geretourneerd FALSE. |
S_OK |
0x00000000 |
De methode is geslaagd. Als een Booleaanse retourwaarde wordt verwacht, wordt de geretourneerde waarde TRUE. |
Netwerkfouten
Als de eerste vier cijfers van de foutcode 8007 zijn, geeft dit een systeem- of netwerkfout aan. U kunt de opdracht net gebruiken om deze typen fouten te decoderen. Als u de fout wilt decoderen, converteert u eerst de laatste vier cijfers van de hexadecimale foutcode naar decimaal. Typ vervolgens bij de opdrachtprompt het volgende, waarbij decimale code wordt vervangen door de retourwaarde die u wilt decoderen:
net helpmsg-<decimal_code>
De net-opdracht retourneert een beschrijving van de fout. Als COM bijvoorbeeld de fout 8007054B retourneert, converteert u de 054B naar decimaal (1355). Typ vervolgens het volgende:
net helpmsg 1355
De netopdracht retourneert de foutbeschrijving: 'Het opgegeven domein bestaat niet'.