我正在实现我的第一个进程外 COM 服务器(我的第一个 COM 服务器,就此而言)。我已按照步骤编写 IDL 文件、为代理/存根 DLL 生成代码、编译 DLL 并注册它。
当我检查注册表项时,我有
- 一个名为 的键
HKEY_CLASSES_ROOT/Interface/<GUID>
,其值是 (say)IMyApp
和 - 一个名为 的键
HKEY_CLASSES_ROOT/Interface/<GUID>/ProxyStubClsid32
,其值为<GUID>
,即与键名中的值相同
我不明白第二个键的值如何与键<GUID>
名中的值相同,因为我目前的理解是
- 在
HKEY_CLASSES_ROOT/Interface/<GUID>
, GUID 是一个接口ID - 的值不是
ProxyStubClsid32
接口ID,而是类ID,指实现上述接口的组件 HKEY_CLASSES_ROOT/CLSID/<GUID>/InprocServer32
(其中 GUID 是上面的类ID)的值指向代理 DLL
那么,HKEY_CLASSES_ROOT/Interface/<GUID>/ProxyStubClsid32
如果一个是接口 ID,另一个是类 ID,那么值如何保持相同的值 GUID?
编辑:我仍然希望得到这个答案。简而言之:既然组件和接口是两个不同的东西,那么相同的 ID 怎么能同时用于两者呢?