COM以最简单的forms允许您在应用程序中实例化DLL中类似C ++的类。 基本上它是LoadLibrary的一个荣耀的包装和关于接口的一些约定。 这被称为使用进程中的组件。
但是COM也支持进程外组件。 如果您从这样的组件实例化一个类,COM启动一个新的进程。 你的对象生活在上述过程中,并被透明地整理在你的身上,所以你不会在乎他们住在哪里。 他们甚至可能在不同的计算机上(DCOM)。 您也可以从已经运行的应用程序中获取对象。 一个众所周知的例子是通过脚本控制MS Office。 这就是所谓的自动化(以前称为OLE自动化,围绕这个术语究竟包含了一些混淆)。
有一些很好的文章解释了(进程内)COM是如何工作的低层次的(例如,从零开始的COM,我想知道你的组件是如何工作的, 特别是IPC做的COM使用下面的引擎之间进行通信窗口消息,共享内存,套接字,或其他东西? MSDN列出COM作为一个IPC方法本身 ,但我猜它必须使用下面的东西。在不同的情况下(从C ++实例化一个OOP组件,从VBScript访问一个Excel文档,通过OLE将文档embedded到另一个文档中),看起来就像是所有相同的底层技术一样,最后,编组如何适应图像?相信有必要序列化进程间传输的方法参数,对吗?
我如何在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] 举报,一经查实,本站将立刻删除。