有没有办法手动组织COM编组?

时间:2012-10-11 15:47:42

标签: c++ com automation marshalling

我有两个.exe应用程序。它们中的每一个都包含与Automation兼容的接口,并在项目IDL中进行了描述。所以,我有两个应用程序的tlb。需要组织实现其中一个接口的类的调用方法,这些接口来自在另一个/不同应用程序中运行的代码。它是如何工作在COM服务器和COM客户端抛出进程外边界。但是,intrefaces是隐私,并没有在注册表中注册,因此标准的CoMarshalInterface / CoUnmarshalInterface不起作用。 我怎么做,manualy组织编组(所有需要的数据都存在:tlb,自动化兼容接口)?

P.S。看起来像this但没有注册表注册。

2 个答案:

答案 0 :(得分:3)

让类型库可用并注册,您可能希望COM使用类型库信息自动创建代理/存根对。然而,这不是唯一的方法,如果对象能够通过IMarshal接口,IMarshal::MarshalInterface方法将其自身转换为流,则它将首先查询该对象。

MSDN上的封送详情writes

  

自定义编组对于实现的对象本身就是唯一的   它。它使用由对象实现的代理并提供给   系统在运行时请求。实现自定义的对象   编组必须实现IMarshal接口,而对象则是   支持标准封送没有。

通过以这种方式实现自定义marhshaling,您可以让COM对象将其基本信息保存到流中,并提供CLSID解组器来重新创建另一端的接口。数据将通过进程边界传递,您的对象将被实例化并提供此流数据,以便您重新创建相关接口。

因此,实现IMarshal和朋友,您将能够集成到COM处理,而无需注册或甚至可用您的类型库。

答案 1 :(得分:0)

要传达包含COM对象的两个进程,可以使用ROT(运行对象表),这里有sample显示如何执行它。