gpt4 book ai didi

com - 你如何比较两个任意的 COM 对象(你能得到任意对象的 CLSID 吗?)

转载 作者:行者123 更新时间:2023-12-04 20:27:13 24 4
gpt4 key购买 nike

我正在 COM 中实现一些东西,我在其中新建了一些对象(在本例中为 FilterGraph IFilters),每次我新建另一个对象时,我想遍历前一个列表,看看我是否要添加是“已经在图表上”(已经在列表中)。我的第一个想法是只使用指针相等(没有用)。然后我想到了通过CLSID来比较。

有没有办法从“任意”COM 对象获取 CLSID?

我能找到的最接近的是:从显示名称的子字符串中更新 guid

Problems accessing the Running Object Table

what is CLSID of COM object I just ran in Visual Basic (它使用 CreateObject,但我使用的是 EnumMoniker 而不是 CreateObject)。

(请注意,我发现 IBaseFilter/IMediaFilter 的父类 IPersist 有一个我可以使用的 GetClassID 方法,但出于好奇,是否有更通用的方法...)

最佳答案

CLSID 告诉 COM 对象的对象类(“类型”),尤其是。您可以使用 CoCreateInstance 来创建同一类对象的另一个实例的标识符。

比较非空 CLSID,您可以看出对象属于同一类,但这并不一定意味着对象可以互换。有时您也可以枚举公共(public)属性并比较它们,但这对于任意对象仍然不是可靠的方法。

特别是对于 DirectShow API,使用 CoCreateInstance 实例化的已注册过滤器通常会报告唯一的 CLSID。然而,那些使用名字对象(设备、压缩器)创建的过滤器宁愿共享 CLSID 并被初始化以使用特定资源,并且具有相同标识符的过滤器不一定“相等”。

关于com - 你如何比较两个任意的 COM 对象(你能得到任意对象的 CLSID 吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com