Partilhar via


Códigos de erro em COM

Para indicar sucesso ou falha, os métodos e funções COM retornam um valor do tipo HRESULT. Um HRESULT é um inteiro de 32 bits. O bit de alta ordem do HRESULT sinaliza sucesso ou fracasso. Zero (0) indica sucesso e 1 indica fracasso.

Isso produz os seguintes intervalos numéricos:

  • Códigos de sucesso: 0x0–0x7FFFFFFF.
  • Códigos de erro: 0x80000000–0xFFFFFFFF.

Um pequeno número de métodos COM não retorna um HRESULT valor. Por exemplo, os métodos AddRef e Release retornam valores longos não assinados. Mas cada método COM que retorna um código de erro faz isso retornando um valor de HRESULT.

Para verificar se um método COM é bem-sucedido, examine o bit de alta ordem do retornado HRESULT. Os cabeçalhos do SDK do Windows fornecem duas macros que facilitam isso: a macro SUCCEEDED e a macro FAILED. A macro SUCCEEDED retorna TRUE se um HRESULT é um código de sucesso e FALSE se é um código de erro. O exemplo a seguir verifica se CoInitializeEx tem êxito.

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

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

Às vezes é mais conveniente testar a condição inversa. O FALHOU macro faz o oposto de CONSEGUIU. Ele retorna TRUE para um código de erro e FALSE para um código de sucesso.

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

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

Mais adiante neste módulo, veremos alguns conselhos práticos sobre como estruturar seu código para lidar com erros COM. (Consulte Tratamento de erros em COM.)

Seguinte

Criando um objeto no COM