Rem*_*eau 12
无法直接将接口指针传递给另一个进程.与任何其他指针一样,接口仅在运行时实例化它的进程地址空间中有效.COM有自己的机制,可以跨过程边界封送接口和数据,甚至可以跨同一进程中的不同公寓.在接口的情况下,涉及在每个进程/单元中运行的代理和存根,并使用各种IPC机制(例如管道,RPC或TCP/IP)相互通信.查看这些文章,了解如何使用跨流程/公寓的界面:
要执行您要求的操作,而不是求助于实现自定义封送,您必须使其中一个进程充当进程外COM服务器,然后另一个进程可以使用CoCreateInstance()或GetActiveObject()获取指向该进程的接口指针.服务器的对象在其本地地址空间内工作,让COM为您处理编组详细信息.
它不能直接完成,但您可以使用Client-Server服务框架,该框架可能基于接口.
例如,请参阅我们的开源mORMot框架的最后一个功能:基于接口的服务示例代码和此链接.
您可以interface在远程进程上执行.该功能处理框架的所有通信方式,即进程内调用,GDI消息,命名管道和TCP/HTTP.在内部,它将WM_COPYDATA用于GDI消息,然后将参数和结果作为JSON传输.使用此链接下载源代码(使用http://synopse.info/fossil 1.16+版本)和文档(有几个页面介绍如何实现这些服务).
它是一个开源项目,与Delphi 6一起使用到XE2.
您还可以使用SOAP或DataSnap客户端 - 服务器(如果您具有相应的Delphi版本)或n层商业软件包(如http://www.remobjects.com/da)公开您的界面.这类似于mORMot中实现的方法.
COM也是一个很好的候选者,原生于Windows,但它更难初始化:你必须在每台PC上注册COM(具有管理员权限),你将无法通过网络工作(不推荐使用DCOM,请记住).如果您希望您的服务与其他语言(如.Net)共享,但仅在本地共享,则COM很好.