2

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

更新 1

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

4

1 回答 1

4

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

请注意,此类信息不必存在。接口指针可以在没有CLSID实现它的类上有效。

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

于 2012-05-29T13:58:04.600 回答