DirectXのDirect3Dメソッドの戻り値にHRESULT型がある。実行した関数が何らかの原因でエラーとなった場合に、D3DERR列挙型でエラーの区分を戻り値として返す。ユーザーが定義する関数の戻り値としてHRESULT型を定義する場合などもD3DERR列挙型の定義に従って戻した方が自然であるので、以下によく用いる列挙名やマクロとそのメモをしておく。
#define FAILED(Status) ((HRESULT)(Status)<0)
#define SUCCEEDED(Status) ((HRESULT)(Status)>=0)
S_OK
→エラーは発生していない
E_FAIL
→Direcnt3D サブシステム内で原因不明のエラーが発生した
E_INVALIDARG
→無効なパラメータが関数に渡された
E_OUTOFMEMORY
→Direct3D が呼び出しを完了するための十分なメモリを割り当てることができなかった。
ところでS_OKと似た形態であるS_FALSEというものがあるが、MSDNで調べてみると、COMライブラリが既に初期化されている場合に返される値であり、成功を示している。なのでユーザー定義の関数の戻り値に勘違いでS_FALSEを返した場合に、呼び出し元でSUCCEEDEDマクロを使ってしまうと成功してしまうので注意。
2007年10月05日
この記事へのコメント
コメントを書く
この記事へのトラックバック