更新:2007 年 11 月
运行库可调用包装 (RCW) 的主要目标是隐藏托管和非托管编程模型之间的差异。要实现无缝的转换,RCW 将使用选定的 COM 接口,而不会将其向 .NET 客户端公开,如下图所示。
COM 接口和运行库可调用包装
.gif)
当作为早期绑定对象创建后,RCW 将成为特定的类型。它实现 COM 对象所实现的接口,并公开该对象的接口中的方法、属性和事件。在上图中,RCW 公开 INew 接口但使用 IUnknown 和 IDispatch 接口。此外,RCW 还向 .NET 客户端公开 INew 接口的所有成员。
RCW 使用下表所列的接口,这些接口由它所包装的对象公开。
| 接口 | 说明 | 
|---|---|
| IDispatch | 用于通过反射后期绑定到 COM 对象。 | 
| IErrorInfo | 提供错误的文本说明、错误来源、帮助文件、帮助上下文以及定义错误的接口的 GUID(对于 .NET 类始终是 GUID_NULL)。 | 
| IProvideClassInfo | 如果所包装的 COM 对象实现 IProvideClassInfo,RCW 将从此接口中提取类型信息,以提供更佳的类型标识。 | 
| IUnknown | 对于对象标识、类型强制和生存期管理: 
 | 
RCW 选择性地使用下表列出的接口,这些接口由它所包装的对象公开。
| 接口 | 说明 | 
|---|---|
| IConnectionPoint 和 IConnectionPointContainer | RCW 将公开连接点事件样式的对象转换为基于委托的事件。 | 
| IDispatchEx | 如果类实现 IDispatchEx,RCW 将实现 IExpando。IDispatchEx 接口是 IDispatch 接口的扩展,但与 IDispatch 不同的是,它启用成员的枚举、添加、删除和区分大小写的调用。 | 
| IEnumVARIANT | 使支持枚举的 COM 对象可以当作集合来进行处理。 |