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

在最简单的形式中,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来定制.

相关文章

文章浏览阅读2.2k次,点赞6次,收藏20次。在我们平时办公工作...
文章浏览阅读1k次。解决 Windows make command not found 和...
文章浏览阅读3.2k次,点赞2次,收藏6次。2、鼠标依次点击“计...
文章浏览阅读1.3w次。蓝光版属于高清版的一种。BD英文全名是...
文章浏览阅读974次,点赞7次,收藏8次。提供了更强大的功能,...
文章浏览阅读1.4w次,点赞5次,收藏22次。如果使用iterator的...