现在的位置: 首页 > 综合 > 正文

CLSIDFromProgID和ProgIDFromCLSID的查找位置

2018年02月11日 ⁄ 综合 ⁄ 共 499字 ⁄ 字号 评论关闭

手头正在开发的一个COM是用纯C++写的,所以在DllRegisterServer注册的时候都是自行写入注册表。

当我切换到其他程序测试COM时发现CLSIDFromProgID并不能获取到CLSID。

折腾了一下后才发现我对CLSIDFromProgID这个函数有点小小的误解。

之前一直以为这个函数是从CLSID子键下面去查找的。

HKEY_CLASSES_ROOT\CLSID\{1CA945EA-978B-4012-9443-A1A3EA823EA4}

其实它是在HKEY_CLASSES_ROOT根键下查询的

// 实际是从 HKEY_CLASSES_ROOT\AAA.BBB\CLSID 处获取到CLSID
CLSIDFromProgID("AAA.BBB", &clsid);

相反的,ProgIDFromCLSID才是从CLSID子键下去处获取ProgID。

HKEY_CLASSES_ROOT\CLSID\{1CA945EA-978B-4012-9443-A1A3EA823EA4}\ProgID

大部分人都是用类似ATL的框架去开发COM,注册过程都由框架或工具自动完成了,所以大家可能都没了解到这些细节。

抱歉!评论已关闭.