Gestione degli errori sconosciuti

È legale restituire un codice di stato solo dall'implementazione di un metodo di interfaccia approvato come legalmente restituito. L'impossibilità di osservare questa regola invita la possibilità di conflitto tra i valori del codice di errore restituiti e quelli approvate dall'applicazione. Prestare particolare attenzione a questo potenziale problema durante la propagazione dei codici di errore dalle funzioni chiamate internamente.

Le applicazioni che chiamano le interfacce devono considerare qualsiasi codice di errore restituito sconosciuto (anziché un codice di esito positivo) come sinonimo di E_UNEXPECTED. Questa pratica di gestione dei codici di errore sconosciuti è richiesta dai client delle interfacce e delle funzioni definite da COM. Poiché la pratica di programmazione tipica consiste nel gestire in dettaglio alcuni codici di errore specifici e trattare il resto in modo generico, questo requisito di gestione di codici di errore imprevisti o sconosciuti viene facilmente soddisfatto.

È importante gestire tutti i possibili errori quando si chiama un metodo di interfaccia. In caso contrario, l'applicazione potrebbe arrestarsi in modo anomalo, danneggiare i dati o diventare vulnerabile agli exploit della sicurezza. L'esempio di codice seguente illustra il modo consigliato per gestire gli errori sconosciuti:

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; 
} 
 

Il controllo degli errori seguente viene spesso usato con le routine che non restituiscono nulla di speciale (ad eccezione di S_OK o di un errore imprevisto):

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

Gestione degli errori in COM