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

Posted

技术标签:

【中文标题】c++ 如何在运行时获取 COM 对象 Coclass 的 progid【英文标题】:c++ How to get a COM object Coclass's progid at runtime 【发布时间】:2012-11-01 23:06:24 【问题描述】:

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

这可能吗?

最好的方法是什么?

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

【问题讨论】:

也许这很有用:***.com/questions/1272061/… 谢谢,没找到答案,和c#/.NET有关 【参考方案1】:

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

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

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

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

【讨论】:

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

以上是关于c++ 如何在运行时获取 COM 对象 Coclass 的 progid的主要内容,如果未能解决你的问题,请参考以下文章

如何将 COM 对象的 C# 引用传递给 C++ DLL

C++ nlohmann/json 如何使用运行时提供的 json_pointers 来读取 json 值

你可以从 C++ 运行 C# 代码吗?

C++异常处理运行时是如何实现的?

如何在 C++ 端获取 QQuickItem 的 C++ 对象实例 [重复]

如何在 ASP.NET Core 中保持对象活动?