Gestion des erreurs inconnues

Il est légal de renvoyer un code status uniquement à partir de l’implémentation d’une méthode d’interface approuvée comme pouvant être retournée légalement. Le non-respect de cette règle entraîne la possibilité d’un conflit entre les valeurs de code d’erreur retournées et celles approuvées par l’application. Portez une attention particulière à ce problème potentiel lors de la propagation des codes d’erreur à partir de fonctions appelées en interne.

Les applications qui appellent des interfaces doivent traiter tout code d’erreur retourné inconnu (par opposition à un code de réussite) comme synonyme de E_UNEXPECTED. Cette pratique de gestion des codes d’erreur inconnus est requise par les clients des interfaces et fonctions définies par COM. Étant donné que la pratique de programmation classique consiste à gérer quelques codes d’erreur spécifiques en détail et à traiter le reste de manière générique, cette exigence de gestion des codes d’erreur inattendus ou inconnus est facilement satisfaite.

Il est important de gérer toutes les erreurs possibles lors de l’appel d’une méthode d’interface. Si vous ne le faites pas, votre application peut se bloquer, endommager des données ou devenir vulnérable aux attaques de sécurité. L’exemple de code suivant montre la méthode recommandée pour gérer les erreurs inconnues :

HRESULT hr; 
hr = xxMethod(); 
 
switch (GetScode(hr))  
{ 
    case NOERROR: 
      // Method returned success. 
      break; 
 
    case x1: 
      // Handle error x1 here.
      break; 
 
    case x2: 
      // Handle error x2 here.
      break; 
 
    case E_UNEXPECTED: 
    default: 
      // Handle unexpected errors here. 
      break; 
} 
 

La case activée d’erreur suivante est souvent utilisée avec les routines qui ne retournent rien de spécial (autre que S_OK ou une erreur inattendue) :

if (xxMethod() == NOERROR) 
{
    // Handle success here.
} 
else 
{
    // Handle failure here.
} 

Gestion des erreurs dans COM