Codes d’erreur dans COM

Pour indiquer la réussite ou l’échec, les méthodes et fonctions COM retournent une valeur de type HRESULT. Un HRESULT est un entier de 32 bits. Le bit d’ordre élevé du HRESULT signale la réussite ou l’échec. Zéro (0) indique la réussite et 1 indique l’échec.

Cela produit les plages numériques suivantes :

  • Codes de réussite : 0x0-0x7FFFFFFF.
  • Codes d’erreur : 0x80000000-0xFFFFFFFF.

Un petit nombre de méthodes COM ne retournent pas de valeur HRESULT . Par exemple, les méthodes AddRef et Release retournent des valeurs longues non signées. Mais chaque méthode COM qui retourne un code d’erreur le fait en retournant une valeur HRESULT .

Pour case activée si une méthode COM réussit, examinez le bit d’ordre élevé du HRESULT retourné. Les en-têtes du Kit de développement logiciel (SDK) Windows fournissent deux macros qui facilitent ce processus : la macro SUCCEEDED et la macro FAILED . La macro SUCCEEDED retourne TRUE si un HRESULT est un code de réussite et FALSE s’il s’agit d’un code d’erreur. L’exemple suivant vérifie si CoInitializeEx réussit.

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (SUCCEEDED(hr))
{
    // The function succeeded.
}
else
{
    // Handle the error.
}

Parfois, il est plus pratique de tester la condition inverse. La macro FAILED fait l’inverse de SUCCEEDED. Il retourne TRUE pour un code d’erreur et FALSE pour un code de réussite.

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (FAILED(hr))
{
    // Handle the error.
}
else
{
    // The function succeeded.
}

Plus loin dans ce module, nous examinerons quelques conseils pratiques sur la façon de structurer votre code pour gérer les erreurs COM. (Voir Gestion des erreurs dans COM.)

Suivant

Création d’un objet dans COM