c ++如何在运行时获取COM对象Coclass的progid

Gol*_*k84 3 c++ com atl visual-studio-2010

我需要编写一个动态从COM对象中提取progid的函数.

这可能吗?

最好的方法是什么?

编辑:我需要处理的所有coclasses实现IProvideClassInfo

Rom*_* R. 5

首先,无法保证信息首先可用.即使您刚刚使用ProgID实例化了一个对象,您也可能无法将其恢复.

最简单的方法是查询其中一个IPersist和朋友(IPersistStream等)接口,然后调用IPersist::GetClassID获取CLSID.然后使用ProgIDFromCLSID或通过注册表查找转换为ProgID .

另一种选择是以这种替代方式查询IProvideClassInfoIProvideClassInfo2访问感兴趣的CLSID.

如果上述两个方法都不起作用,第三个选项是查询IDispatch并尝试打开类型库,然后遍历查找coclass信息.