CLSIDFromProgID和ProgIDFromCLSID的查找位置

来源:互联网 发布:斑马网络招聘 编辑:程序博客网 时间:2024/05/20 04:28

手头正在开发的一个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 处获取到CLSIDCLSIDFromProgID("AAA.BBB", &clsid);

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

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

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

0 0