骆驼空间站

简单就是美,不受任何商业的驱使,我们有自己的圈子

博客园 首页 新随笔 联系 订阅 管理
NET Framework 开发人员指南 
运行库可调用包装 

公共语言运行库通过名为运行库可调用包装 (RCW) 的代理来公开 COM 对象。虽然 RCW 在 .NET 客户端看来是普通的对象,但它的主要功能是封送在 .NET 客户端和 COM 对象之间传递的调用。

无论一个 COM 对象存在多少个引用,运行库只为每个 COM 对象创建一个 RCW。运行库只为每个对象维护一个每进程的 RCW。如果在一个应用程序域或单元中创建 RCW,然后将引用传递至另外一个应用程序域或单元,则会使用第一个对象的代理。如下图所示,对于公开 INew 和 INewer 接口的 COM 对象,任意数目的托管客户端都可以持有引用。

通过运行库可调用包装来访问 COM 对象
RCW

利用从类型库中导出的元数据,运行库将创建所调用的 COM 对象和该对象的包装。每个 RCW 都会在它所包装的 COM 对象上维护一个接口指针缓存,并且在不再需要 RCW 时释放它对该 COM 对象的引用。运行库将对 RCW 执行垃圾回收。

RCW 的功能之一是代表被包装的对象封送在托管和非托管代码之间传递的数据。具体地说,只要客户端和服务器之间传递了表示形式不同的数据,RCW 就会为方法参数和方法返回值提供封送处理。

标准的包装会强制实施内置的封送处理规则。例如,当 .NET 客户端将一个 String 类型作为参数的一部分传递给非托管对象时,包装就会将该 String 类型转换为 BSTR 类型。如果 COM 对象向其托管调用方返回 BSTR,调用方将接收到 String 类型。客户端和服务器都会收发它们所熟悉的数据。其他类型则不需要进行任何转换。例如,标准的包装将始终在托管和非托管代码之间传递 4 字节的整数,而不会转换其类型。

posted on 2006-06-01 21:44  骆驼SPACE  阅读(436)  评论(0编辑  收藏  举报