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

时间:2011-11-01 18:37:13

标签: delphi guid directshow dspack

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

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

我现在还不足以了解DirectShow如何知道方法指针的查找方式,以了解我的设计是否安全。当我直接向图形添加Filter的实例时,DirectShow是否存储Filter Graph将通过对象引用或类ID调用的接口方法指针?如果它是前者那么一切都会好的,但如果它是后者,那么如果同一个实例获得所有方法调用,则可能会出现问题。有谁知道这个设计问题的答案?

1 个答案:

答案 0 :(得分:2)

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