Partilhar via


Tratamento de erros desconhecidos

É legal retornar um código de status somente a partir da implementação de um método de interface sancionado como legalmente retornável. A não observância desta regra convida à possibilidade de conflito entre os valores do código de erro devolvido e os sancionados pela aplicação. Preste especial atenção a esse problema potencial ao propagar códigos de erro de funções que são chamadas internamente.

Os aplicativos que chamam interfaces devem tratar qualquer código de erro retornado desconhecido (em oposição a um código de sucesso) como sinônimo de E_UNEXPECTED. Esta prática de lidar com códigos de erro desconhecidos é exigida pelos clientes das interfaces e funções definidas COM. Como a prática típica de programação é lidar com alguns códigos de erro específicos em detalhes e tratar o resto genericamente, esse requisito de lidar com códigos de erro inesperados ou desconhecidos é facilmente atendido.

É importante lidar com todos os erros possíveis ao chamar um método de interface. Se isso não for feito, seu aplicativo poderá falhar, corromper dados ou ficar vulnerável a explorações de segurança. O exemplo de código a seguir mostra a maneira recomendada de lidar com erros desconhecidos:

HRESULT hr; 
hr = xxMethod(); 
 
switch (GetScode(hr))  
{ 
    case NOERROR: 
      // Method returned success. 
      break; 
 
    case x1: 
      // Handle error x1 here.
      break; 
 
    case x2: 
      // Handle error x2 here.
      break; 
 
    case E_UNEXPECTED: 
    default: 
      // Handle unexpected errors here. 
      break; 
} 
 

A seguinte verificação de erros é frequentemente usada com as rotinas que não retornam nada de especial (além de S_OK ou algum erro inesperado):

if (xxMethod() == NOERROR) 
{
    // Handle success here.
} 
else 
{
    // Handle failure here.
} 

Tratamento de erros no COM