有一些具体的组件类对象实现的COM接口的指针,是否有可能获得实现此接口(CLSID)的底层对象的GUID?
更新1
更广泛地说,我有一个像SetFont(ICanvasFont* font)这样的函数,我需要一种方法来确定实现ICanvasFont接口的底层对象是否属于某个类(比如MCanvasFont)。
发布于 2012-05-29 21:58:05
此接口指针上的IUnknown::QueryInterface以获取以下接口之一:IPersist、IPersistStream、IPersistStreamInit或其他IPersist*接口。如果您幸运地获得了一个,那么GetClassID方法将为您获取CLSID类标识符(备用选项是IProvideClassInfo和IProvideClassInfo::GetClassInfo)。
请注意,这种信息并不是必须存在的。接口指针在实现它的类上没有CLSID也是有效的。
UPD。如果主要目标是在所提供的接口上识别您自己的实现(“所提供的ICanvasFont是我自己的MCanvasFont类的实例,还是不同的东西?”),那么最简单但有效的方法是在该类上实现一些额外的私有接口。如果查询成功,则可以识别该实例。如果不发生封送处理,您甚至可以static_cast回到原始的C++指针。
https://stackoverflow.com/questions/10800595
复制相似问题