模拟 COM 接口

更新:2007 年 11 月

COM 可调用包装 (CCW) 将按照 COM 在实施基于接口的交互时所采用的方式,向 COM 客户端公开所有公共的、COM 可见的接口、数据类型和返回值。对于 COM 客户端而言,对 .NET Framework 对象调用方法相当于对 COM 对象调用方法。

为了创建这种无缝的方法,CCW 将创建传统的 COM 接口,如 IUnknownIDispatch。如下图所示,CCW 对它所包装的 .NET 对象持有单个引用。COM 客户端和 .NET 对象将通过 CCW 的代理及存根 (stub) 结构来与对方进行交互。

COM 接口和 COM 可调用包装

COM 接口

除了公开由托管环境中的类显式实现的接口之外,.NET Framework 还提供了代表对象实现下表所列 COM 接口的途径。通过自行提供这些接口的实现,.NET 类可以重写默认的行为。不过,运行库始终会提供 IUnknownIDispatch 接口的实现。

接口

说明

Idispatch

提供用于后期绑定到类型的机制。

IerrorInfo

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

IprovideClassInfo

使 COM 客户端能够访问托管类所实现的 ITypeInfo 接口。

IsupportErrorInfo

使 COM 客户端能够确定托管对象是否支持 IErrorInfo 接口。如果支持,则使客户端能够获取指向最后一个异常对象的指针。所有托管对象都支持 IErrorInfo 接口。

ItypeInfo

提供类的类型信息,该信息与 Tlbexp.exe 生成的类型信息完全相同。

Iunknown

提供 IUnknown 接口的标准实现,COM 客户端将利用该实现来管理 CCW 的生存期并提供类型强制。

托管类还可以提供下表所述的 COM 接口。

接口

说明

(_classname) 类接口

已由运行库公开且未显式定义的接口,它公开在托管对象上显式公开的所有公共接口、方法、属性和字段。

IConnectionPointIconnectionPointContainer

指明基于委托的事件出处的对象的接口(用于注册事件订户的接口)。

IdispatchEx

在类实现 IExpando 时由运行库提供的接口。IDispatchEx 接口是 IDispatch 接口的扩展,但与 IDispatch 不同的是,它启用成员的枚举、添加、删除和区分大小写的调用。

IEnumVARIANT

集合类型类的接口,它在类实现 IEnumerable 时枚举集合中的对象。

请参见

概念

COM 可调用包装

类接口简介

向 COM 公开 .NET Framework 组件