Condividi tramite


Codici in FACILITY_ITF

HRESULTs con strutture come FACILITY_NULL e FACILITY_RPC hanno un significato universale perché sono definiti in un'unica origine: Microsoft. Tuttavia, HRESULTs in FACILITY_ITF sono determinati dalla funzione o dal metodo di interfaccia da cui vengono restituiti. Ciò significa che lo stesso valore a 32 bit in FACILITY_ITF restituito da due metodi di interfaccia diversi potrebbe avere significati diversi.

Il motivo per cui HRESULTs in FACILITY_ITF può avere significati diversi in interfacce diverse è che HRESULTs viene mantenuto a una dimensione efficiente del tipo di dati di 32 bit. Sfortunatamente, i 32 bit non sono sufficientemente grandi per lo sviluppo di un sistema di allocazione del codice di errore che evita i codici in conflitto allocati da programmatori diversi in momenti diversi (a differenza della gestione di identificatori di interfaccia e CLSID). Di conseguenza, HRESULT a 32 bit è strutturato in modo che Microsoft possa definire diversi codici di errore universali, consentendo ad altri programmatori di definire nuovi codici di errore senza timore di conflitto. La convenzione del codice di stato è la seguente:

  • I codici di stato nelle strutture diverse da FACILITY_ITF possono essere definiti solo da Microsoft.
  • I codici di stato nella struttura FACILITY_ITF vengono definiti esclusivamente dallo sviluppatore dell'interfaccia o della funzione che restituisce il codice di stato. Per evitare codici di errore in conflitto, chiunque definisca l'interfaccia è responsabile del coordinamento e della pubblicazione dei codici di stato FACILITY_ITF associati a tale interfaccia.

Tutti i codici di FACILITY_ITF definiti da COM hanno un valore di codice compreso nell'intervallo di 0x0000-0x01FF. Sebbene sia legale usare qualsiasi codice in FACILITY_ITF, è consigliabile usare solo valori di codice nell'intervallo di 0x0200-0xFFFF. Questa raccomandazione viene effettuata come mezzo per ridurre la confusione con eventuali errori definiti da COM.

È inoltre consigliabile che gli sviluppatori definiscino nuove funzioni e interfacce per restituire i codici di errore definiti da COM e nelle strutture diverse da FACILITY_ITF. In particolare, le interfacce che hanno qualsiasi possibilità di essere remote tramite RPC in futuro dovrebbero definire i codici FACILITY_RPC come legali. E_UNEXPECTED è un codice di errore specifico che la maggior parte degli sviluppatori vuole rendere legale universalmente.

Gestione degli errori in COM