我编写了一个推送源过滤器,我在Delphi 6应用程序中私下使用。该应用程序使用DSPACK DirectShow组件库。私下里我的意思是我只是直接将过滤器的实例添加到我的过滤器图,而不是驻留在外部DLL( .ax 文件)中的过滤器。
我应该为我创建的Filter的每个实例创建一个唯一的类ID(GUID),还是在所有创建的实例之间使用相同的类ID是否安全?我很担心这一点,因为Filter的每个实例都创建了一个本地数据存储对象,用于保存为Filter排队的数据。本地数据存储对象由主机应用程序内的其他代码写入,从而通过我的推送源过滤器将数据推入过滤器图形。
我现在还不足以了解DirectShow如何知道方法指针的查找方式,以了解我的设计是否安全。当我直接向图形添加Filter的实例时,DirectShow是否存储Filter Graph将通过对象引用或类ID调用的接口方法指针?如果它是前者那么一切都会好的,但如果它是后者,那么如果同一个实例获得所有方法调用,则可能会出现问题。有谁知道这个设计问题的答案?
答案 0 :(得分:2)
类标识符特定于类,而不是类实例。您的过滤器类应具有自己的唯一标识符,并且该类的所有实例都将在运行时共享它。如果要从其他项目复制代码,则需要确保用新生成的代码替换所有现有的CLSID,IID,LIBID标识符。