Estratégias de tratamento de erros
Como os métodos de interface são virtuais, não é possível que um chamador saiba 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 lidar com eles. Uma verificação simples de zero ou diferente de zero é adequada.
Valores HRESULT
O valor retornado 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. Valores HRESULT comuns e seus valores são listados na tabela a seguir.
HRESULT | Valor | Descrição |
---|---|---|
E_ABORT |
0x80004004 |
A operação foi anulada devido a um erro não especificado. |
E_ACCESSDENIED |
0x80070005 |
Um erro geral negado pelo acesso. |
E_FAIL |
0x80004005 |
Ocorreu uma 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. Não há suporte para a interface. |
E_NOTIMPL |
0x80004001 |
O método não é 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 booliano false. |
S_OK |
0x00000000 |
O método foi bem-sucedido. Se um valor retornado booliano for esperado, o valor retornado será VERDADEIRO. |
Erros de rede
Se os quatro primeiros dígitos do código de erro forem 8007, isso indicará um erro de rede ou sistema. 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, em que o código decimal é substituído pelo valor retornado que você deseja decodificar:
< decimal_code> de suporte técnico líquido
O comando net retorna uma descrição do erro. Por exemplo, se COM retornar o erro 8007054B, converta o 054B em decimal (1355). Em seguida, digite o seguinte:
1355
O comando net retorna a descrição do erro: "O domínio especificado não existia".
Tópicos relacionados
-
tratamento de erros no COM