C++ 有没有办法手动组织COM封送处理?

C++ 有没有办法手动组织COM封送处理?,c++,com,automation,marshalling,C++,Com,Automation,Marshalling,我有两个.exe应用程序。它们中的每一个都包含与自动化兼容的接口,并在项目IDL中进行了描述。因此,这两种应用程序都有tlb。需要根据在另一个/不同应用程序中运行的代码组织实现其中一个接口的类的调用方法。它在COM服务器和COM客户端中的工作方式超出了进程边界。但intrefaces是隐私的,并且没有在注册表中注册,所以标准的CoMarshalInterface/counmarshall接口不起作用。 如何手动组织编组(所有需要的数据都存在:tlb、自动化兼容接口) p.S.看起来像但没有注册。

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


p.S.看起来像但没有注册。

如果类型库可用并已注册,您可能希望COM使用类型库信息自动创建代理/存根对。然而,这不是唯一的方法,COM将首先查询对象,如果它能够通过
IMarshal
接口和方法将自身放入流中

MSDN上的封送处理详细信息:

自定义封送处理对于实现的对象本身是唯一的 信息技术它使用由对象实现并提供给 系统在运行时应请求运行。实现自定义 封送处理必须实现IMarshal接口,而 不支持标准封送处理

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


因此,实现
IMarshal
和friends,您将能够集成到COM处理中,而无需注册类型库,甚至无需使用类型库

要对包含COM对象的两个进程进行通信,可以使用ROT(Running object table,运行对象表),下面是一个演示如何进行通信的示例