如何在运行时获取一个COM对象的Coclass的ProgID

4
我需要编写一个函数,动态从COM对象中提取progid。
这是否可能?
最好的方法是什么?
编辑:我需要处理的所有coclass都实现了IProvideClassInfo。

也许这个链接有用:https://dev59.com/I0jSa4cB1Zd3GeqPJOBt - Lucian
谢谢,但我没有找到我的答案,这与c#/.NET有关。 - Goldorak84
1个回答

6

首先,无法保证信息是否可用。即使您只是使用 ProgID 实例化了一个对象,也可能无法将其获取回来。

最简单的方法是查询其中一个 IPersist 及其相关接口(如 IPersistStream 等),并调用 IPersist::GetClassID 方法获取 CLSID,然后使用 ProgIDFromCLSID 进行转换或通过注册表查找。

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

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


非常完整的答案!我需要处理的所有对象都实现了IProvideClassInfo,因此我使用了这个选项来获取CLSID。 - Goldorak84

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接