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