Strategier för felhantering
Eftersom gränssnittsmetoder är virtuella är det inte möjligt för en anropare att känna till den fullständiga uppsättningen värden som kan returneras från ett enda anrop. En implementering av en metod kan returnera fem värden. en annan kan returnera åtta.
Dokumentationen innehåller vanliga värden som kan returneras för varje metod. Det här är de värden som du måste söka efter och hantera i koden eftersom de har särskilda betydelser. Andra värden kan returneras, men eftersom de inte är meningsfulla behöver du inte skriva särskild kod för att hantera dem. En enkel kontroll av noll eller nonzero är tillräcklig.
HRESULT-värden
Returvärdet för COM-funktioner och -metoder är en HRESULT-. Värdena för vissa HRESULT har ändrats i COM för att eliminera all duplicering och överlappning med systemets felkoder. De som duplicerar systemfelkoder har ändrats till FACILITY_WIN32 och de som överlappar finns kvar i FACILITY_NULL. Vanliga HRESULT- värden och deras värden visas i följande tabell.
HRESULT | Värde | Beskrivning |
---|---|---|
E_ABORT |
0x80004004 |
Åtgärden avbröts på grund av ett ospecificerat fel. |
E_ACCESSDENIED |
0x80070005 |
Ett allmänt fel om nekad åtkomst. |
E_FAIL |
0x80004005 |
Ett ospecificerat fel har inträffat. |
E_HANDLE |
0x80070006 |
Ett ogiltigt handtag användes. |
E_INVALIDARG |
0x80070057 |
Ett eller flera argument är ogiltiga. |
E_NOINTERFACE |
0x80004002 |
Metoden QueryInterface kände inte igen det begärda gränssnittet. Gränssnittet stöds inte. |
E_NOTIMPL |
0x80004001 |
Metoden har inte implementerats. |
E_OUTOFMEMORY |
0x8007000E |
Det gick inte att allokera nödvändigt minne. |
E_PENDING |
0x8000000A |
De data som krävs för att slutföra åtgärden är ännu inte tillgängliga. |
E_POINTER |
0x80004003 |
En ogiltig pekare användes. |
E_UNEXPECTED |
0x8000FFFF |
Ett katastrofalt fel har inträffat. |
S_FALSE |
0x00000001 |
Metoden lyckades och returnerade det booleska värdet FALSE. |
S_OK |
0x00000000 |
Metoden lyckades. Om ett booleskt returvärde förväntas är det returnerade värdet TRUE. |
Nätverksfel
Om de första fyra siffrorna i felkoden är 8007 indikerar detta ett system- eller nätverksfel. Du kan använda kommandot net för att avkoda dessa typer av fel. Om du vill avkoda felet konverterar du först de fyra sista siffrorna i den hexadecimala felkoden till decimal. I kommandotolken skriver du sedan följande, där decimalkoden ersätts med det returvärde som du vill avkoda:
< decimal_code>
Net-kommandot returnerar en beskrivning av felet. Om COM till exempel returnerar felet 8007054B konverterar du 054B till decimal (1355). Skriv sedan följande:
net helpmsg 1355
Net-kommandot returnerar felbeskrivningen: "Den angivna domänen fanns inte".