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

时间:2012-11-13 14:03:31

标签: c++ visual-studio-2010 com atl

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

这可能吗?

最好的方法是什么?

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

1 个答案:

答案 0 :(得分:5)

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

最简单的方法是查询IPersist和朋友(IPersistStream等)界面之一,并致电IPersist::GetClassID获取CLSID。然后使用ProgIDFromCLSID或通过注册表查找转换为ProgID。

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

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