0

Delphi 6 アプリケーションで個人的に使用するプッシュ ソース フィルタを作成しました。アプリケーションは、DSPACK DirectShow コンポーネント ライブラリを使用します。個人的には、外部 DLL ( .axファイル)にあるフィルターの代わりに、フィルターのインスタンスをフィルター グラフに直接追加するだけです。

作成するフィルターのインスタンスごとに一意のクラス ID (GUID) を作成する必要がありますか?それとも、作成したすべてのインスタンス間で同じクラス ID を使用しても安全ですか? Filter の各インスタンスは、Filter のキューに入れられたデータを保持するためのローカル データ ストレージ オブジェクトを作成するため、これについて心配しています。ローカル データ ストレージ オブジェクトは、ホスト アプリケーション内の他のコードによって書き込まれるため、プッシュ ソース フィルターを介してデータをフィルター グラフにプッシュします。

私の設計が安全かどうかを知るために、メソッド ポインターのルックアップがどのように行われるかを知るには、DirectShow については十分ではありません。フィルターのインスタンスをグラフに直接追加する場合、DirectShow は、フィルター グラフがオブジェクト参照またはクラス ID によって呼び出すインターフェイス メソッド ポインターを保存しますか? 前者の場合はすべて問題ありませんが、後者の場合、同じインスタンスがすべてのメソッド呼び出しを取得すると問題になる可能性があります。このデザインの質問に対する答えを知っている人はいますか?

4

1 に答える 1

2

クラス識別子は、クラス インスタンスではなく、クラスに固有です。フィルター クラスには独自の一意の識別子が必要であり、クラスのすべてのインスタンスは実行時にそれを共有します。別のプロジェクトからコードをコピーする場合は、既存のすべての CLSID、IID、LIBID 識別子を新しく生成されたものに置き換える必要があります。

于 2011-11-01T19:26:28.533 に答える