Microsoft DirectX 8.0 |
ここには、Microsoft® DirectShow® アプリケーションを効果的に開発するための情報が含まれている。
グローバル C++ オブジェクトは、コンストラクタ メソッドで DirectShow オブジェクトを作成したり、デストラクタ メソッドでオブジェクトを解放してはならない。このようにすると、次のような理由でアプリケーションが無限にブロックする。
スレッドは、DLL のエントリ ポイント関数内にある間は終了できない。Kernel 32 は、エントリ ポイント関数内ではグローバル プロセスを保持し、ロックによってスレッドが終了できなくなる。DirectShow オブジェクトには独自のスレッドを持つものがあるので、DLL エントリ ポイント関数から解放するとブロックする可能性がある。アプリケーションにグローバル C++ オブジェクトがある場合、C ランタイム DLL は DLL がアンロードされたときにオブジェクトのデストラクタを呼び出す。デストラクタが DirectShow オブジェクトを解放すると、結果としてブロックする可能性がある。
同じような理由で、DLL はエントリ ポイント ルーチンで DirectShow オブジェクトを作成または解放してはならない。
DirectShow フィルタを作成する際は、アプリケーションの書き手に対して、いくつかの方法でプロパティへのアクセスを与えることができる。IProvidePropertyPages インターフェイスを使ってプロパティ ページを提供すると、アプリケーションがこのインターフェイスを表示できる。アプリケーションが独自の UI を提供できるようにするには、IPropertyBag インターフェイスをサポートし、アプリケーションがフィルタに照会してプロパティを発見するようにできる。プロパティに特別なインターフェイスを提供する場合は、フィルタ情報とピン情報の独自のインターフェイスを作成することもできる。