Delphi 是否有一种自动的方法来防止;陈腐的;DirectShow接口引用?

Delphi 是否有一种自动的方法来防止;陈腐的;DirectShow接口引用?,delphi,directshow,smart-pointers,dspack,Delphi,Directshow,Smart Pointers,Dspack,我刚刚有一个很长的调试会话,这是由使用DSPACK组件库的Delphi 6 DirectShow应用程序中的“过时”接口引用引起的。正如您所知,当过滤器图处于活动状态时,需要执行一些操作,而当过滤器图必须处于非活动状态时,需要对组件参数执行其他操作。问题在于,最终可能会出现DirectShow接口引用,这些引用仍然具有初始化值(已赋值,而不是NIL),但对于当前的过滤器图化身无效,因为它们是在过滤器图的前一个化身期间创建的。在打开和关闭过滤器图以在“实时”发现操作和脱机配置操作之间切换时,这并不

我刚刚有一个很长的调试会话,这是由使用DSPACK组件库的Delphi 6 DirectShow应用程序中的“过时”接口引用引起的。正如您所知,当过滤器图处于活动状态时,需要执行一些操作,而当过滤器图必须处于非活动状态时,需要对组件参数执行其他操作。问题在于,最终可能会出现DirectShow接口引用,这些引用仍然具有初始化值(已赋值,而不是NIL),但对于当前的过滤器图化身无效,因为它们是在过滤器图的前一个化身期间创建的。在打开和关闭过滤器图以在“实时”发现操作和脱机配置操作之间切换时,这并不难做到。脱机操作的一个示例是为其中一个DSPACK组件设置名字对象,以便在下次打开图形时创建具体筛选器实例时使用

例如,您可以有一个IBaseFilter引用,该引用是您在第一次激活筛选器图时指定的,在取消激活和重新激活筛选器图后尝试重新使用。接口引用现在是“过时的”,因为它不属于过滤器图的当前版本,而是属于以前的版本。这会导致各种奇怪的、不直观的DirectShow错误消息,这些消息看起来不像,但实际上是由于接口引用过时造成的


是否有人想出了一种方法来防止这种情况的发生,无论是通过惯例还是通过一些聪明的解决方案,例如与过滤器图的生命周期相关联的DirectShow智能指针等?或者,唯一的解决方案是对接口引用的使用要格外小心吗?

作为过滤器开发人员,当过滤器收到一些处理请求,并且过滤器似乎已经从图形中删除,或者更改了其状态时,您会返回错误代码

从应用程序方面来说,您可以控制实现任何类型的同步,以指示操作的终止。例如,在停止/释放筛选图之前,您可以设置终止标志(布尔变量),在一种可能会延迟并需要同步的处理回调中,您可以检查该标志,并知道何时由于未完成的终止请求而中止处理