0

カスタム プロパティ ページを持つカスタム DirectShow フィルタがいくつかあります。これらは、フィルターがプロパティ ページと同じプロセスにある場合に正常に機能します。

ただし、グラフ編集の「リモート グラフへの接続」機能を使用すると、プロパティ ページが機能しません。プロパティ ページがリモート フィルターのプライベート COM インターフェイスに対して QueryInterface を実行すると、QueryInterface が失敗します。Microsoft フィルター (EVR ビデオ レンダラーなど) のプロパティ ページは正常に動作するため、可能である必要があります。

おそらくこれは、フィルターのプライベート インターフェイスが「プロセス内」でしか機能せず、これらのインターフェイスが「プロセス外」フィルターで機能するように COM サポートを追加する必要があるためです。これを実現するには、COM 用語で何をする必要がありますか?

DirectShow ベースクラスはこれらの COM 機能をサポートしていますか? フィルターが処理不足になっていることを確実に検出し、プロパティ ページを適切に表示することを拒否できますか?

4

1 に答える 1

2

1 つのオプションは、プロキシ/スタブ ペアを構築することです。しかし、もう 1 つの簡単な方法は、プライベート インターフェイス オートメーションに互換性を持たせ (から派生しIDispatch、型制約が適用される)、それをタイプ ライブラリに配置して、DLL にアタッチし、通常の方法で登録することです。プロキシ/スタブ ペアは、そのようなインターフェイスに自動的に提供されます。

DirectShow 基本クラスは、これに対する組み込みサポートを提供しません。Windows で提供されるストック DirectShow フィルターは、プロセスの境界を越えてインターフェイスを渡すことと互換性がない可能性があり、何年も前にそれぞれの開発を担当するチームに依存していると思います。たとえば、ビデオ レンダラーには、リモートで接続できるインターフェイスがあります。反対に、オーディオ レンダラーは、そのような機能を念頭に置いていないインターフェイスを備えており、そのような接続を試みているプロセスの 1 つをクラッシュさせるだけです (私の記憶が正しければ、クライアント側のプロセス)。

于 2012-08-15T18:08:57.433 に答える