c++ - 正确扩展 COM 接口(interface) (IDL)

标签 c++ com interface idl

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

[
  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 接口(interface)。现在根据我的理解,正确的方法是创建一个继承 IInfo 接口(interface)的 IInfo2 接口(interface),但是我需要我的 IExtendedInfoTask 继承自这个 IInfo2。更改其当前继承会破坏现有接口(interface),不是吗?

执行此操作的正确方法是创建一个扩展 IInfo2 并复制 IExtendedInfoTask 方法的 IExtendedInfoTask 吗?

最佳答案

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

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

关于c++ - 正确扩展 COM 接口(interface) (IDL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867634/

相关文章:

java - 如何对没有实现 Iterable 的类使用 for-each 循环

typescript - 如何在 Typescript 中将类型转换为接口(interface)

c++ - 重载运算符=

c++ - std::lower_bound 中没有小情况吗?

c# - 如何使用来自另一个 .NET 程序集的 ComVisible .NET 库作为 COM 库。

automation - XLA、COM、自动化、托管代码插件

c# - 指定 T 应该是接口(interface)的泛型

c++ - boost::process 如何知道进程何时退出 "gracefully or not"?

c++ - 是否需要显式对齐?

c# - 通过 C# 中的 COM RCW 对象检测跨线程编码