Delen via


Codes in FACILITY_ITF

HRESULT-met faciliteiten zoals FACILITY_NULL en FACILITY_RPC universele betekenis hebben, omdat ze zijn gedefinieerd in één bron: Microsoft. Echter, HRESULTs in FACILITY_ITF worden bepaald door de functie- of interfacemethode waaruit ze worden geretourneerd. Dit betekent dat dezelfde 32-bits waarde in FACILITY_ITF geretourneerd door twee verschillende interfacemethoden mogelijk verschillende betekenissen hebben.

De reden HRESULT-in FACILITY_ITF verschillende betekenissen kan hebben in verschillende interfaces, is dat HRESULT-s worden bewaard tot een efficiënte gegevenstypegrootte van 32 bits. Helaas is 32 bits niet groot genoeg voor de ontwikkeling van een systeem voor foutcodetoewijzing dat conflicterende codes vermijdt die op verschillende tijdstippen op verschillende tijdstippen door verschillende programmeurs zijn toegewezen (in tegenstelling tot de verwerking van interface-id's en CLSID's). Als gevolg hiervan is de 32-bits HRESULT- zodanig gestructureerd dat Microsoft verschillende universele foutcodes kan definiëren, terwijl andere programmeurs nieuwe foutcodes kunnen definiëren zonder angst voor conflict. De statuscodeconventie is als volgt:

  • Statuscodes in andere faciliteiten dan FACILITY_ITF kunnen alleen worden gedefinieerd door Microsoft.
  • Statuscodes in faciliteit FACILITY_ITF worden uitsluitend gedefinieerd door de ontwikkelaar van de interface of functie die de statuscode retourneert. Om conflicterende foutcodes te voorkomen, is degene die de interface definieert verantwoordelijk voor het coördineren en publiceren van de FACILITY_ITF statuscodes die aan die interface zijn gekoppeld.

Alle COM-gedefinieerde FACILITY_ITF-codes hebben een codewaarde in het bereik van 0x0000-0x01FF. Hoewel het wettelijk is om codes in FACILITY_ITF te gebruiken, wordt het aanbevolen om alleen codewaarden in het bereik van 0x0200-0xFFFF te gebruiken. Deze aanbeveling wordt gedaan als een manier om verwarring met com-gedefinieerde fouten te verminderen.

Het wordt ook aanbevolen dat ontwikkelaars nieuwe functies en interfaces definiëren om foutcodes te retourneren zoals gedefinieerd door COM en in andere faciliteiten dan FACILITY_ITF. In het bijzonder moeten interfaces die in de toekomst op afstand met RPC kunnen worden gebruikt, de FACILITY_RPC codes als juridisch definiëren. E_UNEXPECTED is een specifieke foutcode die de meeste ontwikkelaars universeel juridisch willen maken.

foutafhandeling in COM-