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 de valeurs qui peuvent être retournées à partir d’un seul appel. Une implémentation d’une méthode peut retourner cinq valeurs ; une 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 rechercher et gérer dans votre code, car elles ont des significations spéciales. D’autres valeurs peuvent être retournées, mais parce qu’elles ne sont pas significatives, vous n’avez pas besoin d’écrire du code spécial pour les gérer. Un simple contrôle de zéro ou différent de zéro est adéquat.
Valeurs HRESULT
La valeur de retour des fonctions et méthodes COM est une HRESULT. Les valeurs de certains HRESULT ont été modifiées dans COM pour éliminer toutes les duplications et se chevaucher avec les codes d’erreur système. Les codes d’erreur système en double 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 d’accès refusé. |
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 |
La méthode n’est pas implémentée. |
E_OUTOFMEMORY |
0x8007000E |
La méthode n’a pas pu allouer de 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 retourné la valeur booléenne FALSE. |
S_OK |
0x00000000 |
La méthode a réussi. 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 ce qui suit :
net helpmsg 1355
La commande net retourne la description de l’erreur : « Le domaine spécifié n’existait pas ».
Rubriques connexes
-
gestion des erreurs dans COM