不明なエラーの処理

ステータス コードを返すのは、合法的に返せるものとして認可されたインターフェイス メソッドの実装からのみです。 この規則に従わない場合、返されたエラー コード値とアプリケーションによって許可された値との間で競合が発生する可能性があります。 内部的に呼び出される関数からエラー コードを伝播させる場合は、この潜在的な問題に特に注意してください。

インターフェースを呼び出すアプリケーションは、(成功コードではなく) 不明なエラー コードが返された場合、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 でのエラー処理