Compartilhar via


Códigos de erro no COM

Para indicar êxito ou falha, 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 êxito ou falha. Zero (0) indica êxito e 1 indica falha.

Isso produz os seguintes intervalos numéricos:

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

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

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

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. A macro FAILED faz o oposto de SUCCEEDED. Ele retorna TRUE para um código de erro e FALSE para um código de êxito.

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

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

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

Avançar

Criando um objeto em COM