利用 ADSI 扩展重新审视 COM 聚合规则

下面简要回顾了 COM 聚合和 ADSI 扩展规则。

  • CreateInstance方法会返回一个指向 IUnknown 接口的指针,如下所示,该接口不会将任何函数调用委托给聚合器。

    IUnknown::QueryInterface 方法会返回它所支持的接口指针,而对于它不支持的接口,则会返回错误信息。

    IUnknown::AddRef 方法会增加聚合扩展对象本身的引用计数。

    IUnkown::Release 方法会递减聚合扩展对象自身的引用计数,并在引用计数为 0 时销毁自身。

  • 在执行 CreateInstance 方法时,扩展对象应存储聚合器的 IUnknown 指针,例如 m_pOuterUnknown。

  • 扩展对象支持的所有接口(包括 IADsExtension)都应继承自 IUnknown,后者会将所有函数调用委托给聚合器。

只要符合标准的 COM 聚合规则,扩展编写器可以选择任何喜欢的内部实现方式。 请注意,扩展对象不必作为独立对象运行。 扩展的目的是用作聚合。 但是,扩展可以作为独立对象和聚合对象来编写。

除了支持标准 COM 聚合外,扩展对象还可以支持 IADsExtension 以获得更高级的功能。 如果支持后期绑定,扩展应: