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

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

编译和注册代理/存根本身不是问题,但考虑以下情况。 有我们的公司出货一个COM对象实现IAnotherCompanyInterface和ThirdPartyCompany相同。 因此,这两个组件可能最终被部署在同一台机器上。

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

Solutions Collecting From Web of "如何为第三方定义的COM接口注册代理/存根?"

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

我从事这个工作已经有一段时间了,所以这是“大声思考”,但希望这会有所帮助。

我认为你可以看到一个描述你想要实现的接口的类型库。 如果是这样,请将其加载到oleview.exe中。 将它给你的IDL拷贝到你自己的一个新的.idl文件中,并在你的文件上实现自己的实现。

我知道你的问题实际上是关于代理/存根DLL。 没关系。 您的COM将与您的实际COM服务器一起生成,并且可以在您的机器和用户的机器上运行。 如果您的代码安装在也安装了“另一家公司”位的机器上,则不应该担心…

代理/存根(stub)只是一些告诉COM如何在COM客户端和COM服务器之间传递参数和返回值的代码。 如果你的是从他们的typelib生成的IDL构建的,它们在功能上是等效的。 您的COM服务器可以通过它们的代理/存根被成功调用,反之亦然。

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