我有两个.exe应用程序。它们中的每一个都包含与Automation兼容的接口,并在项目IDL中进行了描述。所以,我有两个应用程序的tlb。需要组织实现其中一个接口的类的调用方法,这些接口来自在另一个/不同应用程序中运行的代码。它是如何工作在COM服务器和COM客户端抛出进程外边界。但是,intrefaces是隐私,并没有在注册表中注册,因此标准的CoMarshalInterface / CoUnmarshalInterface不起作用。 我怎么做,manualy组织编组(所有需要的数据都存在:tlb,自动化兼容接口)?
P.S。看起来像this但没有注册表注册。
答案 0 :(得分:3)
让类型库可用并注册,您可能希望COM使用类型库信息自动创建代理/存根对。然而,这不是唯一的方法,如果对象能够通过IMarshal
接口,IMarshal::MarshalInterface
方法将其自身转换为流,则它将首先查询该对象。
MSDN上的封送详情writes:
自定义编组对于实现的对象本身就是唯一的 它。它使用由对象实现的代理并提供给 系统在运行时请求。实现自定义的对象 编组必须实现IMarshal接口,而对象则是 支持标准封送没有。
通过以这种方式实现自定义marhshaling,您可以让COM对象将其基本信息保存到流中,并提供CLSID
解组器来重新创建另一端的接口。数据将通过进程边界传递,您的对象将被实例化并提供此流数据,以便您重新创建相关接口。
因此,实现IMarshal
和朋友,您将能够集成到COM处理,而无需注册或甚至可用您的类型库。
答案 1 :(得分:0)
要传达包含COM对象的两个进程,可以使用ROT(运行对象表),这里有sample显示如何执行它。