我使用WM_COPYDATA来使进程A和B之间进行通信。在基本数据类型的交换上没有问题。
现在我有一个问题,在某些情况下,我希望能够从进程A传递一个接口(IDispatch)到进程B中。这可能吗?
直接将接口指针传递到另一个进程是不可能的。与其他指针一样,接口只在运行时实例化它的进程地址空间中有效。COM拥有其自己的机制来在进程边界和甚至同一进程的不同公寓之间传输接口和数据。对于接口,这涉及在每个进程/公寓中运行的代理和存根,并使用各种IPC机制(例如管道、RPC或TCP/IP)相互通信。请查看以下文章了解如何在进程/公寓之间使用接口:
如果要避免实现自定义封送处理而做您所要求的事情,您需要使其中一个进程充当进程外COM服务器,然后另一个进程可以使用CoCreateInstance()
或GetActiveObject()
来获取工作在其本地地址空间内的服务器对象的接口指针,并让COM为您处理封送处理的详细信息。
WM_COPYDATA
进行GDI消息传输参数和结果作为JSON。使用此链接下载源代码(使用http://synopse.info/fossil 1.16+版本)和文档(有关如何实现这些服务的几页)。
IHTMLDocument2
接口(对象必须实现IAccessible
),所以我想这可能会有帮助... - kobik