gpt4 book ai didi

c++ - COM:使用指向它实现的接口(interface)的指针获取 coclass 对象的 GUID

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:53 24 4
gpt4 key购买 nike

具有指向由某些具体组件类对象实现的 COM 接口(interface)的指针是否有可能获得实现此接口(interface) (CLSID) 的底层对象的 GUID?

更新 1

更一般地说,我有一个像 SetFont(ICanvasFont* font) 的函数,我需要一种方法来确定实现 ICanvasFont 接口(interface)的底层对象是否属于某些类(比如 MCanvasFont)。

最佳答案

IUnknown::QueryInterface 在此接口(interface)指针上获取以下之一:IPersistIPersistStreamIPersistStreamInit 或其他 IPersist* 接口(interface)。如果您幸运地获得了一个,那么 GetClassID 方法将为您提供 CLSID 类标识符(替代选项是 IProvideClassInfoIProvideClassInfo: :GetClassInfo).

请注意,此类信息不一定存在。接口(interface)指针在实现它的类上没有 CLSID 的情况下也是有效的。

更新。如果主要目标是在提供的接口(interface)上识别您自己的实现(“提供的 ICanvasFont 是我自己的 MCanvasFont 类的实例,还是有所不同?”) ,那么最简单但有效的方法是在类上实现一些额外的私有(private)接口(interface)。如果您的查询成功,那么您就可以识别该实例。如果不进行编码(marshal)处理,您甚至可以static_cast 返回原始 C++ 指针。

关于c++ - COM:使用指向它实现的接口(interface)的指针获取 coclass 对象的 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10800595/

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