微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

COM / Automation如何在IPC下做IPC?

COM以最简单的forms允许您在应用程序中实例化DLL中类似C ++的类。 基本上它是LoadLibrary的一个荣耀的包装和关于接口的一些约定。 这被称为使用进程中的组件。

但是COM也支持进程外组件。 如果您从这样的组件实例化一个类,COM启动一个新的进程。 你的对象生活在上述过程中,并被透明地整理在你的身上,所以你不会在乎他们住在哪里。 他们甚至可能在不同的计算机上(DCOM)。 您也可以从已经运行的应用程序中获取对象。 一个众所周知的例子是通过脚本控制MS Office。 这就是所谓的自动化(以前称为OLE自动化,围绕这个术语究竟包含了一些混淆)。

有一些很好的文章解释了(进程内)COM是如何工作的低层次的(例如,从零开始的COM,我想知道你的组件是如何工作的, 特别是IPC做的COM使用下面的引擎之间进行通信窗口消息,共享内存,套接字,或其他东西? MSDN列出COM作为一个IPC方法本身 ,但我猜它必须使用下面的东西。在不同的情况下(从C ++实例化一个OOP组件,从VBScript访问一个Excel文档,通过OLE将文档embedded到另一个文档中),看起来就像是所有相同的底层技术一样,最后,编组如何适应图像?相信有必要序列化进程间传输的方法参数,对吗?

在通用文件对话框中获取当前所选文件的真实名称

如何为所有用户注册一个COM对象

我如何在Linux中使用COM ATL项目?

如何在COM组件内创build线程?

System.UnauthorizedAccessException:创buildCOM组件的实例失败,错误为80070005(C#)

COM服务器是否必须为参数调用SysFreeString()?

COMAdmin.COMAdminCatalog – 如何获取DCOM Config文件内容

如何为SENS事件注册接收对象

通过COM独立控制2个独立的Excel实例…可以完成吗?

有没有关于IdentityUnmarshal接口的任何文档?

根据这个MSDN文章 ,这是RPC。

当您实例化一个OOP组件时,COM子系统将生成一个进程内代理。 这个代理负责打包参数和解包返回值。 它还会在服务器进程中生成一个存根,可以期望的是,解包参数并打包返回值。

有趣的是,整个编组过程可以通过实现IMarshal来定制。

DCOM最初作为COM的扩展添加,恰好适用于跨公寓呼叫。 注意跨公寓呼叫并不总是从过程到过程。 一个过程可以有多个公寓(0或1个MTA和/或0到n个STA等)。 每个流程至少有一个公寓等

DCOM,某种“中间件”,需要一种技术来处理所有这些低级工作:数据表示,调用者/被调用者惯例,内存管理,连线编组,会话处理,安全性,错误处理等。内部实施DCE / RPC: msrpc 。 请注意,正如微软在其网站上所说,

“除了一些高级功能之外,Microsoft RPC可与其他供应商的OSF RPC实现互操作。”

有一些尝试性的工作让所有这些实现了其他供应商,但他们基本上是由互联网和HTTP的兴起而死亡。

另请注意,此RPC使用Windows消息来处理STA分隔消息。 我建议你仔细阅读这个文档(在微软网站上不再提供这个文档,对他们来说是耻辱:-)以获得更多细节: Markus Horstmann和Mary Kirtland的DCOM体系结构 – 1997年7月23日 。

另请参阅有关DCOM / RCP问题的有趣案例研究,该问题应该告诉您许多有关Windows消息的RPC消息如何在场景下工作: 解决DCOM问题:案例研究

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐