IUnknown 和接口继承

COM 中的继承并不意味着代码重用。 由于没有与接口关联的实现,因此接口继承并不意味着代码继承。 它仅表示与接口关联的协定以 C++ 纯虚拟基类的方式继承并经过修改,无论是通过添加新方法还是进一步限定允许的方法使用情况。 COM 中没有选择性继承。 如果一个接口继承自另一个接口,则包括另一个接口定义的所有方法。

请在预定义的 COM 接口中慎用继承。 所有预定义接口(以及定义的任何自定义接口)都从重要接口 IUnknown 继承其定义,其中包含三个重要方法:QueryInterfaceAddRefRelease。 所有 COM 对象都必须实现 IUnknown 接口,因为它提供使用 QueryInterface 在对象支持的不同接口之间自由移动的方法,以及通过使用 AddRefRelease 管理其生存期的方法。

在创建支持聚合的对象时,需要为所有接口以及独立的 IUnknown 接口实现一组 IUnknown 函数。 在任何情况下,任何对象实现器都将实现 IUnknown 方法。 有关详细信息,请参阅使用和实现 IUnknown 部分。

尽管还有一些接口从除 IUnknown 之外的第二个接口继承其定义,但大多数接口只继承 IUnknown 接口方法。 这使得大多数接口相对紧凑且易于封装。

COM 对象和接口