如果您有代理/存根 DLL,请将其作为file
带有孩子的元素comInterfaceProxyStub
它处理的每个接口的元素(不要忘记threadingModel
属性)。
如果您有类型库,请将其作为file
带有孩子的元素typelib
元素,并添加一个comInterfaceExternalProxyStub
类型库中每个接口的元素(不要忘记tlbid
属性),其中proxyStubClsid32
是自动化编组器:"{00020424-0000-0000-C000-000000000046}"
.
例如,如果您使用标准封送处理(代理/存根 DLL):
<assembly ...>
<file name="myps.dll">
<comInterfaceProxyStub iid="{iid1}"
name="IMyDualInterface1"
baseInterface="{00020400-0000-0000-C000-000000000046}"
numMethods="8"
proxyStubClsid32="{proxyStubClsid32}"
threadingModel="Free"
/>
</file>
</assembly>
如果您使用类型库封送:
<assembly ...>
<file name="mylib.tlb">
<typelib tlbid="{tlbid}"
version="1.0"
helpdir=""
/>
</file>
<comInterfaceExternalProxyStub iid="{iid2}"
baseInterface="{00020400-0000-0000-C000-000000000046}"
numMethod="8"
name="IMyDualInterface2"
tlbid="{tlbid}"
proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
/>
</assembly>
实际上,comInterfaceExternalProxyStub
适用于任何其他注册的(非隔离的)代理/存根。例如:
<assembly ...>
<comInterfaceExternalProxyStub iid="{iid2}"
baseInterface="{00000000-0000-0000-C000-000000000046}"
numMethod="4"
name="IMyInterface3"
proxyStubClsid32="{proxyStubClsid32}"
/>
</assembly>
在这种情况下,{proxyStubClsid32}
是已注册的代理/存根 CLSID。
如果我没记错的话,当 Windows XP 仍然受支持时,我已经成功尝试过使用comInterfaceExternalProxyStub
对于代理/存根 DLL 中的接口,然后声明相应的comClass
代理/存根中的元素file
元素,实际上不需要comInterfaceProxyStub
元素。
然而,这不是一个好的做法,comInterfaceExternalProxyStub
实际上应该仅用于外部代理/存根,正如其记录的方式一样,听起来好像允许 COM 基础结构在激活所需的代理/存根时不在隔离的 CLSID 中查找。