TL; DR由regsvr32
生成的所有注册表项必须存在于SxS reg-free-COM清单中,反之亦然?清单中的注册免费COM需要哪些标签?
我想要免费注册COM去第三方组件。
Readingupon的主题,我发现有提到的几个元素,可以放入清单:
From the docs,我们可以添加以下标签清单来描述一个COM组件:
assemblyIdentity
- 这真的只是描述了“抽象assembly”据我可以告诉comClass
- 介绍COM类(IID在terface)。它会出现,这总是需要的。typelib
- 什么时候?comInterfaceExternalProxyStub
- 什么时候?- - 什么时候?
From the other docs for HKEY_LOCAL_MACHINE\SOFTWARE\Classes
我们可以看到有几个类别的COM注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}
我认为大致相当于comClass
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{IID}
将对应于要么comInterface[External]ProxyStub
,但我认真地无线索何时使用哪个(或两者)- 哪个regsitry条目对应于
typelib
清单条目?
使用regsvr42提取东西,我想regfree的dll产生仅包含comClass
条目,没有类型库或ProxyStub条目清单。 (并且我交叉检查了写入的密钥,所述的DLL,pdm.dll
,MS的进程调试管理器仅写入这些密钥,即在注册表中没有明显的类型库或代理存根信息。)
如果注册表只包含与comClass
有关的信息,那么这是否意味着此信息在SxS清单中是足够的,或者可能需要清单中的其他信息?
顺便说一句,我注意到注册表中包含VersionIndependentProgId
,并且具有附加在末尾的一个版本号的ProgId
。该清单仅具有ProgId
条目,该文档状态:
的ProgID:与 COM组件相关联版依赖性编程标识符。 ProgID的格式是
<vendor>.<component>.<version>
。
但该文档还规定
的comClass元素可以有
<progid>...</progid>
元素 孩子,这列出的版本有关的ProgID。
and they say progid属性应该是版本无关的。
那么,这里放什么?当客户端没有请求特定版本时,它甚至是重要的吗?
PDM不会有类型库,它没有IDispatch接口,您必须使用CoCreateInstance()。而且它像一个免费线程进程组件一样嘎嘎,所以不需要代理/存根。这里究竟出了什么问题? –
@Hans,谢谢。没有任何事情会出现这样的错误,但我不确定是否有任何潜在的缺陷。 (COM总是让我觉得我失去了一些东西。)如果你能帮助我解开上面的两个或三个实际有用的问题,我会很感激。否则,我很高兴,你似乎认为一切都是我命令:-) –