0

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

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

这可能是因为我的过滤器的私有接口只能在“进程中”工作,我需要添加额外的 COM 支持,以便这些接口可以与“进程外”过滤器一起使用。为了实现这一目标,我需要用 COM 术语做什么?

DirectShow 基类是否支持这些 COM 功能?我能否可靠地检测到过滤器何时耗尽进程并拒绝优雅地显示属性页?

4

1 回答 1

2

一种选择是构建代理/存根对。但另一个更简单的方法是使您的私有接口自动化兼容(派生自IDispatch,适用类型约束),并将其放入要附加到 DLL 的类型库中,并以通常的方式注册。代理/存根对将自动为此类接口提供,无需打扰。

DirectShow 基类不提供对此的内置支持。Windows 提供的常用 DirectShow 过滤器可能与通过进程边界传递接口不兼容,我的猜测是它取决于几年前负责各自开发的团队。例如,视频渲染器具有可以远程连接的接口。相反,音频渲染器的接口没有考虑到这种能力,它们只会使试图建立这种连接的进程之一崩溃(客户端进程,如果我没记错的话)。

于 2012-08-15T18:08:57.433 回答