正确扩展COM接口(IDL)

时间:2009-12-08 15:17:37

标签: c++ com interface idl

我正在处理一些遗留的c ++代码,我需要扩展一个接口。例如,当前的接口是:

[
  object,
  uuid(guid),
  version(1.0),
  dual,
  nonextensible,
  oleautomation
]
interface IInfo : ITask {
   // Methods here
}

[
  object,
  uuid(guid),
  version(1.0),
  dual,
  nonextensible,
  oleautomation
]
interface IExtendedInfoTask : IInfo {
   // Methods here
}

我想扩展的是IInfo接口。现在根据我的理解,正确的方法是创建一个继承IInfo接口的IInfo2接口,但是我需要我的IExtendedInfoTask继承这个IInfo2。改变它的当前继承会破坏现有的接口吗?

这样做的正确方法是创建扩展IInfo2的IExtendedInfoTask并复制IExtendedInfoTask的方法吗?

1 个答案:

答案 0 :(得分:8)

执行此操作的正确方法是创建扩展新IInfo2接口的IExtendedInfoTask2。 COM要求接口一旦定义,就是不可变的。

您可以使用同一个类实现IExtendedInfoTask和IExtendedInfoTask2,因此调用者可以使用任一版本。这只是一个vtable差异 - 你不必单独实现这些方法。