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".