エラー値の意味を知る
プログラムを書くうえで、エラー処理は避けて通れません。 DirectShow APIの多くは実行するとHRESULTを返します。 HRESULTがNOERRORの場合は成功ですが、それ以外の場合は何かが起きています。 DirectShow APIから返ってくるHRESULTを解析すると、よくわからない数値が入っています。 しかし、知りたいのはエラー内容であって、エラーとして返ってくる値ではありません。 ここでは、DirectShowのエラー値を解析する簡単な方法を説明したいと思います。
DirectXエラー値解析ユーティリティ
DirectXにはエラー値を解析するユーティリティがあります。 DirectXのエラー値解析ユーティリティは、「すべてのプログラム > Microsoft DirectX 9.0 SDK > DirectX Utilities > DirectX Error Lookup」から実行できます。
試しに0x80004001を入れてみる
とりあえず、試しに値を入れてみましょう。 ここに入れる値はHRESULTの値です。 この例では、何らかの方法でHRESULTの値を16進数で取得しているものとします。 (例えば、printfやMessageBoxなどです。その他方法でもかまいません。) 取得した値は0x80004001であったとします。 10進数でもかまいませんが、その場合には、hexではなくdecimalの方を選択する必要があります。 「look up」と書いてあるボタンを押すと、結果が以下のように表示されます。
上記結果を見ると、どうも0x80004001はE_NOTIMPLであるようです。
さらに、「The function called is not supported at this time」だそうです。 要は、実装されていない、NOT IMPLEMENTEDみたいです。
このように、DirectXのエラー解析ユーティリティを使うと簡単にエラー内容を知ることが出来ます。 これを知らないと、DirectXのヘッダをgrepしてまわる(もしくは、ファイル検索してまわる)という行為に出たりしないといけなくなります。 HRESULTで良くわからない値が出てきてしまったら、このユーティリティを試してみて下さい。