不明なエラーの処理
状態コードは、法的に返せると認められたインターフェイス メソッドの実装からのみ返すことは有効です。 この規則を観察しないと、返されたエラー コード値とアプリケーションによって承認された値の間で競合が発生する可能性があります。 内部的に呼び出される関数からエラー コードを伝達する場合は、この潜在的な問題に特に注意してください。
インターフェイスを呼び出すアプリケーションでは、(成功コードではなく) 不明な返されたエラー コードを、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.
}
関連トピック