Struktur för COM-felkoder
Följande bild visar formatet för en HRESULT- (eller SCODE); talen anger bitpositioner:
Högordningsbiten i HRESULT- eller SCODE anger om returvärdet representerar framgång eller fel. Om värdet är inställt på 0, SEVERITY_SUCCESS, anger värdet att det lyckades. Om värdet är 1, SEVERITY_ERROR, indikerar det fel.
R-, C-, N- och r-bitarna är reserverade.
Anläggningsfältet anger den systemtjänst som ansvarar för felet. Microsoft allokerar nya anläggningskoder när de blir nödvändiga. De flesta SCODEs och HRESULT värden anger anläggningsfältet till FACILITY_ITF, vilket indikerar ett gränssnittsmetodfel.
Vanliga anläggningsfält beskrivs i följande tabell.
Anläggningsfält | Värde | Beskrivning |
---|---|---|
anläggningsdistribution |
2 |
För late-binding IDispatch-gränssnittsfel. |
FACILITY_ITF |
4 |
För de flesta statuskoder som returneras från gränssnittsmetoder. Den faktiska innebörden av felet definieras av gränssnittet. Det vill säga två HRESULT-med exakt samma 32-bitarsvärde som returneras från två olika gränssnitt kan ha olika betydelser. |
FACILITY_NULL |
0 |
För allmänt tillämpliga vanliga statuskoder som S_OK. |
FACILITY_RPC |
1 |
För statuskoder som returneras från fjärrproceduranrop. |
ANLÄGGNINGSFÖRVARING |
3 |
För statuskoder som returneras från IStorage- eller IStream-metodanrop relaterade till strukturerad lagring. Statuskoder vars kod (lägre 16 bitar) är inom intervallet för MS-DOS felkoder (det vill säga mindre än 256) har samma betydelse som motsvarande MS-DOS fel. |
FACILITY_WIN32 |
7 |
Används för att tillhandahålla ett sätt att hantera felkoder från funktioner i Windows API som en HRESULT-. Felkoder i 16-bitars OLE som duplicerade systemfelkoder har också ändrats till FACILITY_WIN32. |
FÖRNÖDENHET_FÖNSTER |
8 |
Används för ytterligare felkoder från Microsoft-definierade gränssnitt. |
Kodfältet är ett unikt nummer som har tilldelats för att representera felet eller varningen.
Enligt konventionen har HRESULT- värden vanligtvis namn i följande format: Facility_Severity_Reason.
Anläggning är antingen anläggningsnamnet eller någon annan särskiljande identifierare. Allvarlighetsgrad är en bokstav, S eller E, som anger om funktionsanropet lyckades (S) eller skapade ett fel (E); och Orsak är en identifierare som beskriver kodens innebörd. Statuskoden STG_E_FILENOTFOUND anger till exempel att ett lagringsrelaterat fel har inträffat. mer specifikt finns det ingen begärd fil. Statuskoder från FACILITY_NULL utelämna prefixet Facility_ .
Felkoder definieras inom ramen för en gränssnittsimplementering. När de har definierats kan framgångskoder inte ändras eller nya framgångskoder läggs till. Nya felkoder kan dock skrivas. Microsoft förbehåller sig rätten att definiera nya felkoder (men inte framgångskoder) för de gränssnitt som beskrivs i FACILITY_ITF eller i nya anläggningar.