Обработка неизвестных ошибок

Оно является законным для возврата кода состояния только из реализации метода интерфейса, санкционированного как юридически возвращаемого. Не уследить это правило предлагает возможность конфликта между возвращаемыми значениями кода ошибки и теми, которые санкционированы приложением. Обратите особое внимание на эту потенциальную проблему при распространении кодов ошибок из функций, которые вызываются внутренне.

Приложения, вызывающие интерфейсы, должны рассматривать любой неизвестный возвращенный код ошибки (в отличие от кода успешности) как синоним E_UNEXPECTED. Эта практика обработки неизвестных кодов ошибок требуется клиентами определяемых COM-интерфейсов и функций. Так как обычная практика программирования заключается в подробном обработке нескольких конкретных кодов ошибок и обработке остальных типов, это требование обработки непредвиденных или неизвестных кодов ошибок легко выполняется.

При вызове метода интерфейса важно обрабатывать все возможные ошибки. Сбой этого может привести к сбою приложения, повреждению данных или уязвимости к эксплойтам безопасности. В следующем примере кода показан рекомендуемый способ обработки неизвестных ошибок:

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

Следующая ошибка проверка часто используется с этими подпрограммами, которые не возвращают ничего специального (кроме S_OK или непредвиденной ошибки):

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

Обработка ошибок в COM