DirectShow の薄いラッパーである DirectShowLib を使用しています。BDA デバイスの列挙とその CLSID の収集に成功しました。ユーザーが名前でデバイスを選択し、選択した CLSID がわかっている場合、このデバイスをフィルター グラフに追加する必要があります。
私は次のことをしました:
Type type = Type.GetTypeFromCLSID(classid);
object device = Activator.CreateInstance(type);
ここで問題は、デバイスで取得したオブジェクトの種類は何ですか? デバッガーは、それが有効な Com オブジェクトであることを示しています。IBaseFilter にキャストしようとすると、「そのようなインターフェイスはサポートされていません」という例外が発生します。IMoniker に正常にキャストできます。しかし、次のことをしようとすると:
int hr = graphBuilder.AddSourceFilterForMoniker(
device, null, filtername, out receivedFilter);
エラーが発生します:
HRESULT: 0x800401e4 (2147746276)
Name: MK_E_SYNTAX
メソッド AddSourceFilterForMoniker は、列挙の直後に使用すると正常に機能することがわかっているため、モニカーを正しく作成していないようです。
クラス ID がわかっている場合、モニカー オブジェクトを作成する正しい方法は何ですか? AddSourceFilterForMoniker に渡すことができますか?