Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如果筛选器具有持久本地数据,是否需要为每个DirectShow筛选器实例提供唯一的类ID?_Delphi_Guid_Directshow_Dspack - Fatal编程技术网

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

Delphi 如果筛选器具有持久本地数据,是否需要为每个DirectShow筛选器实例提供唯一的类ID?,delphi,guid,directshow,dspack,Delphi,Guid,Directshow,Dspack,我已经编写了一个推送源过滤器,我在Delphi6应用程序中私自使用它。应用程序使用DSPACK DirectShow组件库。私下里,我的意思是我只需将过滤器的实例直接添加到我的过滤器图中,而不是驻留在外部DLL(.ax文件)中的过滤器 我应该为我创建的筛选器的每个实例创建一个唯一的类ID(GUID),还是在创建的所有实例之间使用相同的类ID是安全的?我之所以担心这一点,是因为过滤器的每个实例都会创建一个本地数据存储对象,用于保存排队等待过滤器的数据。本地数据存储对象由主机应用程序中的其他代码写入

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

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


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

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

是的,谢谢,我知道。但是,如果我将筛选器类的多个实例添加到同一个筛选器图中,我创建的第一个实例是否会得到所有DX调用(FillBuffer()、DecideBufferSize()等),或者筛选器图是否会根据pin连接将这些调用路由到正确的类实例?一旦筛选器在图中实例化,它们的
CLSID
仅用于持久性目的(仅在保存状态时!),因此它们需要公开相同的
CLSID
。该图通过接口指针区分Fitler,并为其提供唯一的名称。