我需要编写一个函数,动态从COM对象中提取progid。
这是否可能?
最好的方法是什么?
编辑:我需要处理的所有coclass都实现了IProvideClassInfo。
这是否可能?
最好的方法是什么?
编辑:我需要处理的所有coclass都实现了IProvideClassInfo。
首先,无法保证信息是否可用。即使您只是使用 ProgID 实例化了一个对象,也可能无法将其获取回来。
最简单的方法是查询其中一个 IPersist
及其相关接口(如 IPersistStream
等),并调用 IPersist::GetClassID
方法获取 CLSID
,然后使用 ProgIDFromCLSID
进行转换或通过注册表查找。
另一种选择是查询 IProvideClassInfo
和 IProvideClassInfo2
以以这种替代方式访问感兴趣的 CLSID。
如果上述两种方法都不起作用,则第三个选项是查询 IDispatch
并尝试打开类型库,然后循环遍历以查找 coclass 信息。