封送选定接口

运行时可调用包装 (RCW) 的主要目标是隐藏托管和非托管编程模型之间的差异。 要实现无缝的转换,RCW 将使用选定的 COM 接口,而不会将其向 .NET 客户端公开,如下图所示。

COM 接口和运行时可调用包装

带接口的 RCW

当作为早期绑定对象创建后,RCW 将成为特定的类型。 它实现 COM 对象所实现的接口,并公开该对象的接口中的方法、属性和事件。 在上图中,RCW 公开 INew 接口但使用 IUnknownIDispatch 接口。 此外,RCW 还向 .NET 客户端公开 INew 接口的所有成员。

RCW 使用下表所列的接口,这些接口由它所包装的对象公开。

接口

说明

IDispatch

用于通过反射后期绑定到 COM 对象。

IErrorInfo

提供错误的文本说明、错误来源、帮助文件、帮助上下文以及定义错误的接口的 GUID(对于 .NET 类始终是 GUID_NULL)。

IProvideClassInfo

如果所包装的 COM 对象实现 IProvideClassInfo,RCW 将从此接口中提取类型信息,以提供更佳的类型标识。

IUnknown

对于对象标识、类型强制和生存期管理:

  • 对象标识

    运行时通过比较每个对象的 IUnknown 接口值来区分 COM 对象。

  • 类型强制

    RCW 识别 QueryInterface 方法所执行的动态类型发现。

  • 生存期管理

    利用 QueryInterface 方法,RCW 将获取并保留对非托管对象的引用,直至运行时对包装执行垃圾回收(这会释放该非托管对象)。

RCW 选择性地使用下表列出的接口,这些接口由它所包装的对象公开。

接口

说明

IConnectionPointIConnectionPointContainer

RCW 将公开连接点事件样式的对象转换为基于委托的事件。

IDispatchEx

如果类实现 IDispatchEx,RCW 将实现 IExpandoIDispatchEx 接口是 IDispatch 接口的扩展,但与 IDispatch 不同的是,它启用成员的枚举、添加、删除和区分大小写的调用。

IEnumVARIANT

使支持枚举的 COM 对象可以当作集合来进行处理。

请参见

概念

运行时可调用包装

为互操作限定 .NET 类型

其他资源

有关从程序集转换到类型库的摘要