Stratégies de gestion des erreurs
Étant donné que les méthodes d’interface sont virtuelles, il n’est pas possible pour un appelant de connaître l’ensemble des valeurs qui peuvent être retournées à partir d’un appel quelconque. Une implémentation d’une méthode peut retourner cinq valeurs ; un autre peut retourner huit.
La documentation répertorie les valeurs communes qui peuvent être retournées pour chaque méthode. Il s’agit des valeurs que vous devez vérifier et gérer dans votre code, car elles ont des significations particulières. D’autres valeurs peuvent être retournées, mais étant donné qu’elles ne sont pas significatives, vous n’avez pas besoin d’écrire un code spécial pour les gérer. Une vérification simple pour zéro ou une valeur différente de zéro est appropriée.
Valeurs HRESULT
La valeur de retour des fonctions et des méthodes COM est un HRESULT. Les valeurs de certains HRESULTs ont été modifiées dans COM pour éliminer toute duplication et se chevaucher avec les codes d’erreur système. Ceux qui dupliquent les codes d’erreur système ont été remplacés par l’installation de _ Win32, et ceux qui se chevauchent restent _ null. Les valeurs HRESULT communes et leurs valeurs sont répertoriées dans le tableau suivant.
| HRESULT | Valeur | Description |
|---|---|---|
| E _ Abort |
0x80004004 |
L’opération a été abandonnée en raison d’une erreur non spécifiée. |
| _ACCESSDENIED E |
0x80070005 |
Une erreur générale d’accès refusé. |
| E _ échec |
0x80004005 |
Une erreur non spécifiée s’est produite. |
| _handle E |
0x80070006 |
Un descripteur non valide a été utilisé. |
| E _ INVALIDARG |
0x80070057 |
Un ou plusieurs arguments ne sont pas valides. |
| E _ NOinterface |
0x80004002 |
La méthode QueryInterface n’a pas reconnu l’interface demandée. L’interface n’est pas prise en charge. |
| _NOTIMPL E |
0x80004001 |
Cette méthode n'est pas implémentée. |
| _OUTOFMEMORY E |
0x8007000E |
La méthode n’a pas pu allouer la mémoire nécessaire. |
| E _ en attente |
0x8000000A |
Les données nécessaires à l’exécution de l’opération ne sont pas encore disponibles. |
| _pointeur E |
0x80004003 |
Un pointeur non valide a été utilisé. |
| E _ inattendu |
0x8000FFFF |
Une défaillance catastrophique s’est produite. |
| S _ false |
0x00000001 |
La méthode a réussi et a retourné la valeur booléenne false. |
| _OK |
0x00000000 |
S_OK Si une valeur de retour booléenne est attendue, la valeur retournée est true. |
Erreurs réseau
Si les quatre premiers chiffres du code d’erreur sont 8007, cela indique une erreur système ou réseau. Vous pouvez utiliser la commande net pour décoder ces types d’erreurs. Pour décoder l’erreur, commencez par convertir les quatre derniers chiffres du code d’erreur hexadécimal en décimal. Ensuite, à l’invite de commandes, tapez ce qui suit, où le code décimal est remplacé par la valeur de retour que vous souhaitez décoder :
net helpmsg < _ Code décimal>
La commande net renvoie une description de l’erreur. Par exemple, si COM retourne l’erreur 8007054B, convertissez 054B en Decimal (1355). Tapez ensuite la commande suivante :
net helpmsg 1355
La commande net retourne la description de l’erreur : « le domaine spécifié n’existe pas ».