首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在组件服务或UIRibbon中找到OleView

无法在组件服务或UIRibbon中找到OleView
EN

Stack Overflow用户
提问于 2014-05-14 01:47:11
回答 1查看 195关注 0票数 0

最近,我正在探索如何在c++中使用COM,并给出一个简单的带状代码。

守则有:

代码语言:javascript
复制
HRESULT hr = CoCreateInstance(CLSID_UIRibbonFramework, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&g_pFramework));

所以,它是基于COM的,对吧?在组件服务中应该有关于这个组件的一些信息,但是无论如何我都找不到它。

我的问题是windows如何在头文件(UIRibbon.h)中找到具有相应CLSID的COM组件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-14 06:45:06

windows如何找到具有相应CLSID的COM组件

CoCreateInstance

CoCreateInstance函数通过连接到与指定的CLSID关联的类对象、创建未初始化的实例和释放类对象,提供了一个方便的快捷方式。因此,它封装了以下功能:CoGetClassObject.

CoGetClassObject

对CoGetClassObject的调用创建、初始化并使调用方(通过指向用riid参数指定的接口的指针)访问类对象。类对象是与您在rclsid参数中指定的CLSID关联的对象。系统如何定位计算机中关联的代码和数据的详细信息对调用方是透明的,任何尚未加载的代码的动态加载也是透明的。 ..。 有两个地方可以为类找到CLSID:(1)注册表保存CLSID和文件后缀之间的关联,以及CLSID与文件签名之间的关联,以确定对象的类。(2)当将对象保存到持久存储时,它的CLSID与其数据一起存储。

正如MSDN所说,查找对调用者是透明的,它嵌入了多个源:一些CLSID可能由服务器显式注册,并且是查找的优先级,然后是COM类的每个用户注册表、机器范围的注册表、“作为”记录等等。

想必,最常见的情况如下。COM服务器(应用程序或DLL)将其CLSID注册到系统注册表,作为安装的一部分。然后,系统注册表在HKEY_CLASSES_ROOT下保存一条记录,该记录包含有关特定CLSID的信息以及如何定位与其关联的代码。然后,CoCreateInstance和朋友在调用方请求上查找此信息,并执行魔术操作,让调用方获得请求的CLSID的可调用接口指针。

尤其是CLSID_UIRibbonFramework的情况,它的相关信息在HKEY_CLASSES_ROOT\CLSID\{926749fa-2615-4987-8845-c33e65f2b957}下的注册表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23644367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档