【发布时间】:2014-07-28 21:33:47
【问题描述】:
我的问题是:在定义 COM 接口和类以及枚举的 IDL 文件中,version 标签的正确用法是什么?
MSN documentation of it 令人困惑:“备注”下的第一段似乎明确表示,如果界面发生任何变化,则必须更改 IID。
但页面的其余部分继续描述使用具有相同 IID 的不同 versions。甚至有一个sample COM interface 页面显示使用version 和interface。
发生了什么事?
附加问题:是否允许将 version 与 enum 一起使用? MIDL 7.00.05555 接受 version 属性的 enum,但是如果将版本化枚举用作函数参数,MIDL 会给出错误。
【问题讨论】:
-
[version]属性不能用于 COM 接口,只能用于 RPC 接口。您引用的那篇文章是这样说的:“MIDL 编译器不支持 COM 接口的多个版本。因此,包含[object]属性的接口属性列表不能包含[version]属性。”在您引用的第二篇文章中,[version]的唯一实例适用于library,而不适用于interface。 -
@IgorTandetnik 那么第一段之后的整个“备注”部分是错误的吗? (我假设“MIDL 规范”仅与 COM 接口相关)
-
MIDL 用于 COM 和 DCE-RPC 接口(在某种程度上任何人实际使用后者)。
-
@IgorTandentik 好的,所以我应该将“备注”第 1 段视为关于 COM,而页面的其余部分则与 DCE-RPC 有关。写一个答案,我会接受:)