COM のエラー コード

成功または失敗を示すために、COM メソッドと関数は HRESULT 型の値を返します。 HRESULT は 32 ビット整数です。 HRESULT の上位ビットは、成功または失敗を示します。 ゼロ (0) は成功を示し、1 は失敗を示します。

これにより、次の数値範囲が生成されます。

  • 成功コード: 0x0 –0x7FFFFFFF。
  • エラー コード: 0x80000000-0xFFFFFFFF。

少数の COM メソッドでは 、HRESULT 値は返されません。 たとえば、 AddRef メソッドと Release メソッドは、符号なし long 値を返します。 ただし、エラー コードを返す COM メソッドはすべて 、HRESULT 値を返すことによって行います。

COM メソッドが成功したかどうかをチェックするには、返された HRESULT の上位ビットを調べます。 Windows SDK ヘッダーには、これを簡単にする 2 つのマクロ ( SUCCEEDED マクロと FAILED マクロ) が用意されています。 HRESULT が成功コードの場合、SUCCEEDED マクロは TRUE を返し、エラー コードの場合は FALSE を返します。 次の例では、 CoInitializeEx が 成功するかどうかを確認します。

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (SUCCEEDED(hr))
{
    // The function succeeded.
}
else
{
    // Handle the error.
}

逆条件をテストする方が便利な場合があります。 FAILED マクロは SUCCEEDED の逆を行います。 エラー コードの 場合は TRUE 、成功コードの 場合は FALSE を 返します。

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (FAILED(hr))
{
    // Handle the error.
}
else
{
    // The function succeeded.
}

このモジュールの後半では、COM エラーを処理するためにコードを構造化する方法に関する実用的なアドバイスについて説明します。 ( 「COM でのエラー処理」を参照してください)。

次へ

COM でのオブジェクトの作成