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 complet des valeurs qui peuvent être retournées à partir d’un appel. Une implémentation d’une méthode peut retourner cinq valeurs ; un autre peut retourner huit.

La documentation répertorie les valeurs courantes qui peuvent être retournées pour chaque méthode ; il s’agit des valeurs que vous devez case activée pour et gérer dans votre code, car elles ont des significations spéciales. D’autres valeurs peuvent être retournées, mais comme elles ne sont pas significatives, vous n’avez pas besoin d’écrire de code spécial pour les gérer. Une simple case activée pour zéro ou zéro est suffisante.

Valeurs HRESULT

La valeur de retour des fonctions et méthodes COM est HRESULT. Les valeurs de certains HRESULT ont été modifiées dans COM pour éliminer toute duplication et chevauchement avec les codes d’erreur système. Ceux qui dupliquent des codes d’erreur système ont été modifiés en FACILITY_WIN32, et ceux qui se chevauchent restent dans FACILITY_NULL. Les valeurs HRESULT courantes 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.
E_ACCESSDENIED
0x80070005
Erreur générale de refus d’accès.
E_FAIL
0x80004005
Un échec non spécifié s’est produit.
E_HANDLE
0x80070006
Un handle 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.
E_NOTIMPL
0x80004001
Cette méthode n'est pas implémentée.
E_OUTOFMEMORY
0x8007000E
La méthode n’a pas pu allouer la mémoire nécessaire.
E_PENDING
0x8000000A
Les données nécessaires pour terminer l’opération ne sont pas encore disponibles.
E_POINTER
0x80004003
Un pointeur non valide a été utilisé.
E_UNEXPECTED
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.
S_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 <decimal_code>

La commande net retourne une description de l’erreur. Par exemple, si COM retourne l’erreur 8007054B, convertissez le 054B en décimal (1355). Tapez ensuite la commande suivante :

net helpmsg 1355

La commande net retourne la description de l’erreur : « Le domaine spécifié n’existait pas ».

Gestion des erreurs dans COM