COM:使用指向它实现的接口的指针获取coclass对象的GUID

时间:2012-05-29 13:53:45

标签: c++ com

具有由某个具体组件类对象实现的COM接口的指针,是否可以获取实现此接口的基础对象的GUID(CLSID)?

更新1

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

1 个答案:

答案 0 :(得分:4)

IUnknown::QueryInterface在此接口指针上获取以下内容之一:IPersistIPersistStreamIPersistStreamInit或其他IPersist*接口。如果您很幸运得到一个,那么GetClassID方法将为您提供CLSID类标识符(备用选项为IProvideClassInfoIProvideClassInfo::GetClassInfo)。

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

UPD。如果主要目标是在提供的接口上识别您自己的实现(“提供的ICanvasFont是我自己的MCanvasFont类的实例,还是它有所不同?”),那么最简单但最有效的方法是在类上实现一些额外的私有接口。如果您查询它成功,那么您可以识别该实例。如果没有发生编组,你甚至可以static_cast回到原始的C ++指针。