自动生成的DispID为何从0x60020000开始?
.NET导出TLB时默认DispID起始值0x60020000的含义
这个起始值是微软为.NET COM互操作场景预留的DispID范围,具体含义和缘由可以拆解来看:
- 0x60020000对应COM规范里定义的
DISPID_STARTENUM常量,是系统自动分配DispID的起始标记,用来和用户手动指定的DispID划清界限——用户自定义的DispID一般会使用较小的数值(比如0、1、2这类连续值),从这个值开始分配能完全避免冲突。 - 这个区间也避开了COM自动化里的特殊预留DispID,比如代表默认成员的
DISPID_VALUE(值为0)、代表枚举器的DISPID_NEWENUM(值为-4)等,确保.NET导出的接口成员ID不会和这些系统级特殊ID重叠。 - 本质上是微软在.NET和COM互操作时遵循COM规范的设计选择,既符合自动化接口的ID分配规则,又能保证自定义ID和自动分配ID互不干扰。
内容的提问来源于stack exchange,提问作者EO3-Kopf
相关产品推荐
相关产品推荐

