【问题标题】:"version" attribute in Microsoft IDLMicrosoft IDL 中的“版本”属性
【发布时间】:2014-07-28 21:33:47
【问题描述】:

我的问题是:在定义 COM 接口和类以及枚举的 IDL 文件中,version 标签的正确用法是什么?

MSN documentation of it 令人困惑:“备注”下的第一段似乎明确表示,如果界面发生任何变化,则必须更改 IID。

但页面的其余部分继续描述使用具有相同 IID 的不同 versions。甚至有一个sample COM interface 页面显示使用versioninterface

发生了什么事?

附加问题:是否允许将 versionenum 一起使用? 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 有关。写一个答案,我会接受:)

标签: com idl midl


【解决方案1】:

[version] 属性适用于DCE-RPC 接口,不适用于 COM 接口(MIDL 编译器同时支持这两者)。看看你引用的第一篇文章中的两句话:

[version] 接口属性标识 RPC 接口 的多个版本中的特定版本。 (强调我的)

MIDL 编译器不支持多个版本的 COM 接口。因此,包含[object] 属性的接口属性列表不能包含[version] 属性。

在 COM 编程中,您可以应用 [version] 属性的唯一有用的地方是 library 子句。类型库支持版本控制。

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 2012-06-15
    • 2020-10-30
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多