Partager via


Codes dans FACILITY_ITF

Les HRESULTavec des installations telles que FACILITY_NULL et FACILITY_RPC ont une signification universelle, car ils sont définis à une seule source : Microsoft. Toutefois, les HRESULTdans FACILITY_ITF sont déterminés par la fonction ou la méthode d’interface à partir de laquelle ils sont retournés. Cela signifie que la même valeur 32 bits dans FACILITY_ITF retournée par deux méthodes d’interface différentes peut avoir des significations différentes.

La raison pour laquelle les HRESULTdans FACILITY_ITF peuvent avoir des significations différentes dans différentes interfaces est que les HRESULTsont conservés à une taille de type de données efficace de 32 bits. Malheureusement, 32 bits ne sont pas suffisamment volumineux pour le développement d’un système d’allocation de code d’erreur qui évite les codes en conflit alloués par différents programmeurs à différents moments et à différents endroits (contrairement à la gestion des identificateurs d’interface et des CLSID). Par conséquent, le HRESULT 32 bits est structuré de telle sorte que Microsoft puisse définir plusieurs codes d’erreur universels, tout en permettant à d’autres programmeurs de définir de nouveaux codes d’erreur sans crainte de conflit. La convention de code status est la suivante :

  • Les codes d’état dans les installations autres que FACILITY_ITF peuvent être définis uniquement par Microsoft.
  • Les codes d’état dans facility FACILITY_ITF sont définis uniquement par le développeur de l’interface ou de la fonction qui retourne le code status. Pour éviter les codes d’erreur en conflit, celui qui définit l’interface est responsable de la coordination et de la publication des codes FACILITY_ITF status associés à cette interface.

Tous les codes FACILITY_ITF définis par COM ont une valeur de code dans la plage de 0x01FF 0x0000. Bien qu’il soit légal d’utiliser des codes dans FACILITY_ITF, il est recommandé d’utiliser uniquement des valeurs de code dans la plage de 0x0200-0xFFFF être utilisées. Cette recommandation est faite comme un moyen de réduire la confusion avec les erreurs définies par COM.

Il est également recommandé aux développeurs de définir de nouvelles fonctions et interfaces pour retourner des codes d’erreur tels que définis par COM et dans des installations autres que FACILITY_ITF. En particulier, les interfaces qui ont une chance d’être distantes à l’aide de RPC à l’avenir doivent définir les codes de FACILITY_RPC comme juridiques. E_UNEXPECTED est un code d’erreur spécifique que la plupart des développeurs souhaitent rendre universellement légal.

Gestion des erreurs dans COM