Win32 App Error Codes in COM - yoshimune/LearningDirectX11 GitHub Wiki

This page refers to 【Error Codes in COM

正常終了・異常終了を示すため、COMメソッドと関数はHRESULT型の変数を返します。HRESULTは32bitのintegerです。上位ビットは正常終了・異常終了いずれかを表します。0は正常終了・1は異常終了です。

  • 正常終了コード: 0x0-0x7FFFFFFF
  • 異常終了コード: 0x80000000–0xFFFFFFFF

少数のCOMメソッドはHRESULRを返しません。例えばAddRefReleaseメソッドはunsigned long型を返します。しかし、全てのエラーコードを返すCOMメソッドは、HRESULTを返す事によってエラーコードを返します。

COMメソッドが正常終了したかどうかを確認するため、HRESULTの上位ビットを調査します。Windows SDKヘッダーはこの操作を簡単にする2つのマクロを提供します。SUCCEEDEDマクロとFAILEDマクロです。SUCCEEDEDマクロは、HRESULTが正常終了を示す場合はTRUEを、異常終了を示す場合はFALSEを返します。次の例はCoInitializeExが成功したかどうかをチェックしています。

HRESULT hr = CoInitialize(NULL, COINIT_APARTMEMENTTHREADED | COINIT_DISABLE_OLE1DDE);

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

異常終了を先にチェックしたい場合は

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

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

Next:Win32 App Creating an Object in COM