如何为第三方定义的COM接口注册代理/存根?

时间:2009-11-27 09:46:22

标签: windows com marshalling com-interop

有另一家公司运送消耗IAnotherCompanyInterface的产品。我们想要发布一个实现IAnotherCompanyInterface的COM对象。该接口不兼容自动化,因此启用编组的下一个最简单的选项是使用代理/存根。另一家公司不发货代理/存根,也不想。

编译和注册代理/存根本身不是问题,但请考虑以下情况。我们的公司发布了一个实现IAnotherCompanyInterface的COM对象和同样执行相同操作的ThirdPartyCompany。因此,这两个组件最终可能会部署在同一台计算机上。

代理/存根注册是系统范围的接口。他们的代理/存根实现应该如何共存?

2 个答案:

答案 0 :(得分:0)

您可以使用免注册COM或激活上下文完全跳过客户端中的注册表。您可以在清单文件中提供引用您的代理/存根实现的“自定义”comInterfaceExternalProxyStub条目。

答案 1 :(得分:0)

我用这个东西已经有一段时间了,所以这是“大声思考”但希望它会有所帮助......

我认为你可以看到一个描述你想要实现的接口的类型库。如果是这样,请将其加载到oleview.exe中。将它提供的IDL复制到您自己的新.idl文件中,并将您自己的实现基于该文件。

我知道您的问题实际上是关于代理/存根DLL。没关系。您的系统将与您的实际COM服务器一起生成,它将在您的计算机和用户的计算机上运行。如果您的代码安装在同时安装了“Another Company”位的计算机上,则无关紧要......

代理/存根只是一些代码告诉COM如何在COM客户端和COM服务器之间传输参数并返回值。如果你的ID是从他们的类型库生成的IDL构建的,那么它们在功能上是等价的。您的COM服务器可以通过其代理/存根成功调用,反之亦然。

但是,如果他们更改了代理/存根,它们可能不再具有功能等同性。但在这种情况下,他们可能也改变了界面,你的客户端将不再使用你的COM服务器。