需要什么COM支持才能使我的自定义DirectShow过滤器属性页适用于运行对象表中的远程过滤器

时间:2012-08-15 14:50:04

标签: com directshow

我有一些带有自定义属性页的自定义DirectShow过滤器。当过滤器与属性页面处于同一进程时,这些工作正常。

但是当我使用Graph Edit的“连接到远程图形”功能时,属性页不起作用。 当属性页为远程过滤器上的私有COM接口执行QueryInterface时,QueryInterface失败。 Microsoft过滤器的属性页(例如EVR视频渲染器)工作正常,因此必须可行。

可能这种情况正在发生,因为我的过滤器的私有接口仅在“进程中”工作,我需要添加额外的COM支持,以便这些接口可以使用“进程外”过滤器。为了达到这个目的,我需要在COM术语中做些什么?

DirectShow基类是否支持这些COM功能?我能否可靠地检测过滤器何时用完,并拒绝正常显示属性页?

1 个答案:

答案 0 :(得分:2)

一种选择是构建代理/存根对。但另一种方式更简单,就是让你的私有接口自动化兼容(从IDispatch派生,类型constranits apply),并将它放入类型库,它将附加到DLL,并以通常的方式注册。将自动为此类接口提供代理/存根对,无需费心。

DirectShow基类不提供内置支持。随Windows提供的Stock DirectShow过滤器可能与通过进程边界的接口不兼容,我的猜测是它依赖于几年前各自开发的负责团队。例如,视频渲染器具有可以远程连接的接口。相反,音频渲染器具有没有这种功能的接口,它们只会使尝试进行此类连接的其中一个进程崩溃(客户端进程,如果我的内存正确地为我服务)。