Codes in FACILITY_ITF

HRESULTmit Einrichtungen wie FACILITY_NULL und FACILITY_RPC haben universelle Bedeutung, da sie an einer einzigen Quelle definiert werden: Microsoft. HRESULT-Ergebnissein FACILITY_ITF werden jedoch durch die Funktion oder Schnittstellenmethode bestimmt, von der sie zurückgegeben werden. Dies bedeutet, dass derselbe 32-Bit-Wert in FACILITY_ITF, der von zwei verschiedenen Schnittstellenmethoden zurückgegeben wird, möglicherweise unterschiedliche Bedeutungen haben kann.

Der Grund, warum HRESULTs in FACILITY_ITF in verschiedenen Schnittstellen unterschiedliche Bedeutungen haben können, ist, dass HRESULTs auf einer effizienten Datentypgröße von 32 Bits beibehalten werden. Leider sind 32 Bits nicht groß genug für die Entwicklung eines Fehlercodezuordnungssystems, das konfliktede Codes vermeidet, die von verschiedenen Programmierern zu unterschiedlichen Zeiten an verschiedenen Orten zugeordnet werden (im Gegensatz zur Behandlung von Schnittstellenbezeichnern und CLSIDs). Daher ist das 32-Bit-HRESULT so strukturiert, dass Microsoft mehrere universelle Fehlercodes definieren kann, während andere Programmierer neue Fehlercodes ohne Angst vor Konflikten definieren können. Die status-Codekonvention lautet wie folgt:

  • Statuscodes in anderen Einrichtungen als FACILITY_ITF können nur von Microsoft definiert werden.
  • Statuscodes in facility FACILITY_ITF werden ausschließlich vom Entwickler der Schnittstelle oder Funktion definiert, die den status Code zurückgibt. Um in Konflikt stehende Fehlercodes zu vermeiden, ist jeder, der die Schnittstelle definiert, für die Koordinierung und Veröffentlichung der FACILITY_ITF status Codes verantwortlich, die dieser Schnittstelle zugeordnet sind.

Alle COM-definierten FACILITY_ITF-Codes verfügen über einen Codewert im Bereich von 0x0000-0x01FF. Es ist zwar zulässig, alle Codes in FACILITY_ITF zu verwenden, es wird jedoch empfohlen, nur Codewerte im Bereich von 0x0200-0xFFFF zu verwenden. Diese Empfehlung dient zur Verringerung von Verwechslungen mit com-definierten Fehlern.

Es wird auch empfohlen, dass Entwickler neue Funktionen und Schnittstellen definieren, um Fehlercodes gemäß COM-Definition und in anderen Einrichtungen als FACILITY_ITF zurückzugeben. Insbesondere Schnittstellen, die in Zukunft die Möglichkeit haben, mithilfe von RPC remoted zu werden, sollten die FACILITY_RPC Codes als legal definieren. E_UNEXPECTED ist ein spezifischer Fehlercode, den die meisten Entwickler universell legal machen möchten.

Fehlerbehandlung in COM