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を返しません。例えばAddRefとReleaseメソッドは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.
}