首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用已知的class id获取设备名字对象?

如何使用已知的class id获取设备名字对象?
EN

Stack Overflow用户
提问于 2010-03-01 01:31:11
回答 1查看 1.9K关注 0票数 1

我使用的是一个DirectShowLib,它是DirectShow的一个薄包装器。我已经成功地枚举了BDA设备并收集了它们的CLSID。现在,当用户按名称选择设备,并且我知道所选的CLSID时,我需要将此设备添加到我的过滤器图中。

我做了以下工作:

代码语言:javascript
代码运行次数:0
运行
复制
Type type = Type.GetTypeFromCLSID(classid);
object device = Activator.CreateInstance(type);

现在的问题是-我在设备中得到了什么样的对象?调试器显示它是有效的Com对象。如果我试图将它强制转换为IBaseFilter,我得到一个异常“没有这样的接口支持”。我可以成功地将它转换为IMoniker。但是,如果我尝试执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
int hr = graphBuilder.AddSourceFilterForMoniker(
    device, null, filtername, out receivedFilter);

我得到一个错误:

代码语言:javascript
代码运行次数:0
运行
复制
HRESULT: 0x800401e4 (2147746276)
Name: MK_E_SYNTAX

我知道如果我在枚举后立即使用AddSourceFilterForMoniker方法就可以很好地工作,所以似乎我只是没有正确地创建这个名字对象。

如果类id已知,那么创建名字对象的正确方式是什么,这样我就可以将它传递给AddSourceFilterForMoniker了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-01 02:15:51

这只是一个猜测,但看起来您并不是在创建IBindCtx实现。我见过的所有涉及IMoniker的操作都需要传递一个IBindCtx实现,以便为涉及名字对象的操作提供上下文。

话虽如此,AddSourceFilterForMoniker方法也没有什么不同,因为您不会为名字对象传递绑定上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2351872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档