封送选定接口
运行时可调用包装 (RCW) 的主要目标是隐藏托管和非托管编程模型之间的差异。 要实现无缝的转换,RCW 将使用选定的 COM 接口,而不会将其向 .NET 客户端公开,如下图所示。
COM 接口和运行时可调用包装
当作为早期绑定对象创建后,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 对象可以当作集合来进行处理。 |