Koder i FACILITY_ITF
HRESULT-med faciliteter som FACILITY_NULL och FACILITY_RPC har universell betydelse eftersom de definieras på en enda källa: Microsoft. Men HRESULT-i FACILITY_ITF bestäms av den funktion eller gränssnittsmetod som de returneras från. Det innebär att samma 32-bitarsvärde i FACILITY_ITF som returneras från två olika gränssnittsmetoder kan ha olika betydelser.
Anledningen HRESULTi FACILITY_ITF kan ha olika betydelser i olika gränssnitt är att HRESULTs hålls till en effektiv datatypstorlek på 32 bitar. Tyvärr är 32 bitar inte tillräckligt stora för att utveckla ett system för felkodsallokering som undviker motstridiga koder som allokeras av olika programmerare vid olika tidpunkter på olika platser (till skillnad från hanteringen av gränssnittsidentifierare och CLSID:er). Därför är 32-bitars HRESULT- strukturerad så att Microsoft kan definiera flera universella felkoder, samtidigt som andra programmerare kan definiera nya felkoder utan rädsla för konflikter. Statuskodkonventionen är följande:
- Statuskoder i andra anläggningar än FACILITY_ITF kan endast definieras av Microsoft.
- Statuskoder i FACILITY_ITF definieras enbart av utvecklaren av gränssnittet eller funktionen som returnerar statuskoden. För att undvika motstridiga felkoder ansvarar den som definierar gränssnittet för att samordna och publicera FACILITY_ITF statuskoder som är associerade med det gränssnittet.
Alla COM-definierade FACILITY_ITF-koder har ett kodvärde i intervallet för 0x0000-0x01FF. Även om det är lagligt att använda koder i FACILITY_ITF rekommenderar vi att endast kodvärden i intervallet 0x0200-0xFFFF användas. Den här rekommendationen görs som ett sätt att minska förvirringen med eventuella COM-definierade fel.
Vi rekommenderar också att utvecklare definierar nya funktioner och gränssnitt för att returnera felkoder som definierats av COM och i andra anläggningar än FACILITY_ITF. I synnerhet bör gränssnitt som har någon chans att fjärranslutas med RPC i framtiden definiera de FACILITY_RPC koderna som lagliga. E_UNEXPECTED är en specifik felkod som de flesta utvecklare vill göra universellt lagligt.