Поделиться через


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

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

Приложения, вызывающие интерфейсы, должны рассматривать любой неизвестный возвращенный код ошибки (в отличие от кода успешности) как синоним 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-