Dela via


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

felhantering i COM-