Estratégias de tratamento de erros

Como os métodos de interface são virtuais, não é possível para um chamador saber o conjunto completo de valores que podem ser retornados de qualquer chamada. Uma implementação de um método pode retornar cinco valores; outro pode retornar oito.

A documentação lista valores comuns que podem ser retornados para cada método; Esses são os valores que você deve verificar e manipular em seu código porque eles têm significados especiais. Outros valores podem ser retornados, mas como eles não são significativos, você não precisa escrever código especial para manipulá-los. Uma simples verificação de zero ou diferente de zero é adequada.

Valores de HRESULT

O valor de retorno de funções e métodos COM é um HRESULT. Os valores de alguns HRESULTs foram alterados em COM para eliminar toda a duplicação e sobreposição com os códigos de erro do sistema. Aqueles que duplicam códigos de erro do sistema foram alterados para FACILITY_WIN32, e aqueles que se sobrepõem permanecem em FACILITY_NULL. Os valores comuns de HRESULT e seus valores estão listados na tabela a seguir.

HRESULT Valor Descrição
E_ABORT
0x80004004
A operação foi abortada devido a um erro não especificado.
E_ACCESSDENIED
0x80070005
Um erro geral de acesso negado.
E_FAIL
0x80004005
Falha não especificada.
E_HANDLE
0x80070006
Um identificador inválido foi usado.
E_INVALIDARG
0x80070057
Um ou mais argumentos são inválidos.
E_NOINTERFACE
0x80004002
O método QueryInterface não reconheceu a interface solicitada. A interface do não tem suporte.
E_NOTIMPL
0x80004001
O método não está implementado.
E_OUTOFMEMORY
0x8007000E
O método falhou ao alocar a memória necessária.
E_PENDING
0x8000000A
Os dados necessários para concluir a operação ainda não estão disponíveis.
E_POINTER
0x80004003
Um ponteiro inválido foi usado.
E_UNEXPECTED
0x8000FFFF
Ocorreu uma falha catastrófica.
S_FALSE
0x00000001
O método foi bem-sucedido e retornou o valor booleano FALSE.
S_OK
0x00000000
O método foi bem-sucedido. Se um valor de retorno booleano for esperado, o valor retornado será TRUE.

Erros de rede

Se os primeiros quatro dígitos do código de erro forem 8007, isso indicará um erro de sistema ou de rede. Você pode usar o comando net para decodificar esses tipos de erros. Para decodificar o erro, primeiro converta os últimos quatro dígitos do código de erro hexadecimal em decimal. Em seguida, no prompt de comando, digite o seguinte, onde o código decimal é substituído pelo valor de retorno que você deseja decodificar:

net msg <decimal_code>

O comando net retorna uma descrição do erro. Por exemplo, se COM retornar o erro 8007054B, converta o 054B em decimal (1355). Depois, digite o seguinte:

net msg de ajuda 1355

O comando net retorna a descrição do erro: "O domínio especificado não existiu".

Tratamento de erro em COM