如果过滤器具有持久的本地数据,我是否需要为每个DirectShow过滤器实例提供唯一的类ID ?



我写了一个推送源过滤器,我在Delphi 6应用程序中私下使用。应用程序使用DSPACK DirectShow组件库。通过私下,我的意思是我简单地将过滤器的实例直接添加到我的过滤器图中,而不是驻留在外部DLL ()中的过滤器。ax 文件)。

我应该为我创建的过滤器的每个实例创建唯一的类ID (GUID),还是在所有创建的实例之间使用相同的类ID是安全的?我之所以担心这一点,是因为Filter的每个实例都创建了一个本地数据存储对象,用于保存为Filter排队的数据。本地数据存储对象由主机应用程序中的其他代码写入,从而通过我的推送源过滤器将数据推送到Filter Graph中。

我现在对DirectShow不够了解,不知道方法指针查找是如何完成的,也不知道我的设计是否安全。当我添加一个过滤器的实例到图形直接,DirectShow存储接口方法指针的过滤器图形将调用对象引用,或通过类ID?如果是前者,那么一切都很好,但如果是后者,那么如果同一个实例获得所有的方法调用,那么这可能是一个问题。有人知道这个设计问题的答案吗?

类标识符特定于类,而不是类实例。您的过滤器类应该有自己的唯一标识符,并且该类的所有实例将在运行时共享它。如果您正在从另一个项目复制代码,您需要确保将所有现有的CLSID、IID、LIBID标识符替换为新生成的标识符。

最新更新