1

我正在使用一些遗留的 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 的方法吗?

4

1 回答 1

8

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

您可以让同一个类同时实现 IExtendedInfoTask 和 IExtendedInfoTask2,因此调用者可以使用任一版本。这只是 vtable 的区别——您不必单独实现这些方法。

于 2009-12-08T15:23:17.337 回答