Partager via


Codes dans FACILITY_ITF

HRESULTs avec des installations telles que FACILITY_NULL et FACILITY_RPC ont une signification universelle, car elles sont définies à une seule source : Microsoft. Toutefois, HRESULTs dans FACILITY_ITF sont déterminés par la méthode de fonction ou d’interface à partir de laquelle elles sont retournées. 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 HRESULTs dans FACILITY_ITF peut avoir des significations différentes dans différentes interfaces, c’est que HRESULTs sont 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 dans 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 d’état est la suivante :

  • Les codes d’état dans les installations autres que FACILITY_ITF ne peuvent être définis que par Microsoft.
  • Les codes d’état de l’installation FACILITY_ITF sont définis uniquement par le développeur de l’interface ou de la fonction qui retourne le code d’état. Pour éviter les codes d’erreur en conflit, la personne qui définit l’interface est chargée de coordonner et de publier les codes d’état FACILITY_ITF associés à cette interface.

Tous les codes FACILITY_ITF définis par COM ont une valeur de code dans la plage de 0x0000-0x01FF. Bien qu’il soit légal d’utiliser des codes dans FACILITY_ITF, il est recommandé d’utiliser uniquement les valeurs de code dans la plage de 0x0200-0xFFFF. Cette recommandation est faite comme moyen de réduire la confusion avec toutes 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 la possibilité 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 universel.

gestion des erreurs dans COM