我使用的是DirectShowLib其是用于DirectShow的薄的包装。 我已经成功地列举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正确的方式?

有帮助吗?

解决方案

只是一个猜测,但它似乎没有创建一个的 IBindCtx 实施。涉及的IMoniker ,我已经全部操作见过需要IBindCtx实施,以便提供用于涉及绰号操作上下文传递。

这就是说,在 AddSourceFilterForMoniker 方法没有什么不同,在您没有传递一个绑定上下文为名字。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top