次の方法で共有


プラグイン ディストリビュータ (PID)

プラグイン ディストリビュータ (PID) は、フィルタ グラフ マネージャの機能を拡張するための方法である。PID は、フィルタ グラフ マネージャが実行時に集成する COM オブジェクトである。アプリケーションは、フィルタ グラフ マネージャを通じて PID へのアクセスを取得する。

フィルタ グラフ マネージャに対して、サポートしないインターフェイスについて照会されると、次のフォーマットを使ってレジストリのキーが検索される。

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID は、インターフェイス識別子が含まれた文字列である。レジストリにエントリが存在する場合、そのエントリの値によって、インターフェイスをサポートする PID のクラス識別子 (CLSID) が定義される。フィルタ グラフ マネージャは PID を集成し、インターフェイス ポインタを返す。これによって、PID の外部 IUnknown として機能する。アプリケーションがインターフェイス上でメソッドを呼び出すときは、実際には PID 上で呼び出している。しかし、PID の存在はアプリケーションに対しては透過的である。

"ディストリビュータ" という用語は、PID がフィルタ グラフ マネージャのインターフェイスについて、外部 IUnknown ポインタに照会が可能なことに由来している。PID は IFilterGraph::EnumFilters メソッドを呼び出すことで、グラフのフィルタを列挙し、それらのフィルタにメソッドの呼び出しを配布できる。このようにして、PID はアプリケーションがフィルタ上でメソッドを呼び出すための、1 つのコントロール ポイントとしての役割を果たすことができる。

フィルタ グラフ マネージャが PID を集成するときは、IDistributorNotify インターフェイスについて PID に照会する。PID がこのインターフェイスをサポートしている場合、フィルタ グラフ マネージャはこのインターフェイスを使って、グラフでの変更について PID に通知する。

カスタム PID を実装するためには、集成をサポートする COM オブジェクトを作成する。このオブジェクトは、フィルタ グラフ マネージャが既にサポートしていないインターフェイスをサポートしなければならない。また、オプションで IDistributorNotify インターフェイスをサポートすることもできる。

PID がフィルタ グラフ マネージャからインターフェイス ポインタを取得する場合は、それらをすぐに解放する必要がある。解放しないと、循環参照カウントが作成され、フィルタ グラフ マネージャの破棄を妨げる可能性がある。いずれの場合も、フィルタ グラフ マネージャが PID の継続時間を制御するため、フィルタ グラフ マネージャでの参照カウントの保持は不要である。

PID はフィルタ グラフ マネージャによる集成化のために設計されているので、PID のコンストラクタ メソッドでこれを設定することもできる。外部 IUnknown ポインタが NULL であるかどうかを確認し、NULL である場合は、エラー コード VFW_E_NEED_OWNER を返す。「エラー コードと成功コード」を参照すること。また、他のオブジェクトが PID を集成化しないようにするため、IGraphBuilder インターフェイスについて 外部 IUnknown ポインタに照会できる。そのオブジェクトが IGraphBuilder を公開していない場合は、エラーコードを返す。