#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マクロを使ってしまうと成功してしまうので注意。