【问题标题】:Consecutive interface function IDs连续的接口函数 ID
【发布时间】:2014-09-24 10:37:38
【问题描述】:

我在 midl 中有一个 COM 对象接口

interface InterfaceName : IDispatch
{
  [id(1)] HRESULT FunA(...);
  [id(2)] HRESULT FunB(...);
  [id(3)] HRESULT FunC(...);
}

id 必须是连续的吗?或者我可以像这样定义它

interface InterfaceName : IDispatch
{
  [id(1)] HRESULT FunA(...);
  [id(3)] HRESULT FunB(...);
  [id(5)] HRESULT FunC(...);
}

编译第二个版本好像没问题,但是运行时会不会出现问题?

【问题讨论】:

    标签: windows com midl


    【解决方案1】:

    实际的 id 值是任意数字。它们不必是连续的;它们必须是独一无二的。按照惯例,零值和负值是reserved for certain special methods。除此之外,没有任何规则。

    【讨论】:

    • 此规则是否存在任何(在线)参考?
    • 适合哪一个?对于不要求 ID 是连续的?你不能真的期望每个非要求都被记录下来——它们的数量是无限的。
    • 嗯,这只是常识。如果允许您使用两个具有相同 ID 的方法,IDispatch::Invoke 怎么知道该调用哪一个?也许有一段文档明确说明了这一点,但我懒得去寻找它。
    猜你喜欢
    • 2021-04-14
    • 2022-11-25
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多