ComInterfaceType

本文详细介绍了COM接口类型,包括AutoDispatch、AutoDual和None三种设置。AutoDispatch支持后期绑定的COM客户端;AutoDual自动生成双类接口并公开类型信息;None则指示不生成类接口,适合仅通过后期绑定访问IDispatch接口的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
namespace System.Runtime.InteropServices
{
	[ComVisible (true)]
	[Serializable]
	public enum ComInterfaceType
	{
		InterfaceIsDual,
		InterfaceIsIUnknown,
		InterfaceIsIDispatch
	}
}

  • AutoDispatch:表示,该类仅支持后期绑定 COM 客户端。 一个 dispinterface 类自动向 COM 客户端在请求上公开。 类型库生成的 Tlbexp.exe (类型库导出程序) 不包含类型信息 dispinterface 为了防止客户端缓存的 Dispid 的接口。 dispinterface 没有展现中所述的版本控制问题 ClassInterfaceAttribute 因为客户端可以仅后期绑定到该接口。
  • AutoDual:指示双类接口自动生成的类并向 COM 公开。 类型信息是生成类接口,类型库中发布。 使用 AutoDual 由于中所述的版本控制限制是强烈建议您不要 ClassInterfaceAttribute
  • None:指示没有类接口时生成的类。 如果显式不实现任何接口,该类可以仅提供通过后期绑定访问 IDispatch 接口。这是推荐的设置 ClassInterfaceAttribute 使用 ClassInterfaceType.None 是通过由类显式实现的接口公开功能的唯一方法。

限制将双绑定接口选项用于类接口。

双绑定接口支持 COM 客户端对接口成员进行早期和后期绑定。在设计时和测试期间,您可能会发现将类接口设置为双绑定非常有用。对于从不会修改的托管类(及其基类),此选项也是可以接受的。在其他所有情况下,应避免将类接口设置为双绑定。

自动生成的双绑定接口可能会适用于少数的情况,而在多数情况下,它会带来与版本相关的复杂性。例如,使用派生类的类接口的 COM 客户端很容易在遇到对基类的更改时中断。当第三方提供基类时,您将无法控制类接口的布局。此外,与仅调度接口不同,双绑定接口 (ClassInterface.AutoDual) 在导出的类型库中提供了类接口的说明。这样的说明会促使后期绑定的客户端在运行时缓存 DispId。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值