加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – COM / Automation如何在引擎盖下进行IPC?

发布时间:2020-12-14 05:24:15 所属栏目:Windows 来源:网络整理
导读:在最简单的形式中,COM允许您在应用程序中从DLL实例化类C类.基本上它是LoadLibrary的一个美化包装器和一些关于接口的约定.这是使用进程内组件调用的. 但COM也支持进程外组件.如果从这样的组件实例化一个类,COM将启动一个新进程.你的对象生活在这个过程中,并且
在最简单的形式中,COM允许您在应用程序中从DLL实例化类C类.基本上它是LoadLibrary的一个美化包装器和一些关于接口的约定.这是使用进程内组件调用的.

但COM也支持进程外组件.如果从这样的组件实例化一个类,COM将启动一个新进程.你的对象生活在这个过程中,并且被透明地编组到你身上,所以你不太关心他们住在哪里.他们甚至可能在不同的计算机(DCOM)上.您还可以从已在运行的应用程序中获取对象.一个众所周知的例子是通过脚本控制MS Office.这称为自动化(以前称为OLE自动化,并且对于该术语究竟涵盖的内容存在一些混淆).

有几篇很好的文章解释了(在进程中)COM如何工作低级(例如COM from scratch.我想知道当你的组件处于进程外时它是如何工作的.特别是,COM在COM下面使用了什么在进程之间进行通信的窗口?窗口消息,共享内存,套接字或其他东西?MSDN lists COM as an IPC method by itself,但我猜它必须使用下面的其他东西.在不同的情况下使用不同的IPC方法(从C实例化OOP组件),从VBScript访问Excel文档,通过OLE将文档嵌入到另一个文件中?看起来它是完全相同的基础技术.最后,编组如何适应图片?我认为有必要序列化方法参数进行传输进程之间,对吗?

解决方法

根据 this MSDN article,它是RPC.

实例化OOP组件时,COM子系统会生成进程内代理.此代理负责打包参数和解包返回值.它还在服务器进程中生成存根,期望解包参数和打包返回值.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读