处理未知错误

仅从实现被批准为可合法返回的接口方法返回状态代码是合法的。 未能遵守此规则可能会导致返回的错误代码值与应用程序批准的值之间存在冲突。 在从内部调用的函数传播错误代码时,请特别注意此潜在问题。

调用接口的应用程序应将任何返回的未知错误代码(而不是成功代码)视为与 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 中的错误处理