INonDelegatingUnknown

INonDelegatingUnknown 接口是一个 IUnknown 版本,已重命名为在同一 COM 对象中启用对非委托和委派 IUnknown 接口的支持。

语法

interface INonDelegatingUnknown
{
    virtual HRESULT NonDelegatingQueryInterface) (REFIID riid, LPVOID *ppv) PURE;
    virtual ULONG NonDelegatingAddRef)(void) PURE;
    virtual ULONG NonDelegatingRelease)(void) PURE;
};

备注

INonDelegatingUnknown若要用于多个继承,请执行以下步骤。

  1. 从接口派生类,例如 IMyInterface。

  2. 在类定义中包含 DECLARE_IUNKNOWN ,以声明调用外部未知的 QueryInterfaceAddRefRelease 的实现。

  3. 重写 NonDelegatingQueryInterface ,以使用如下代码公开 IMyInterface:

         if (riid == IID_IMyInterface) {
             return GetInterface((IMyInterface *) this, ppv);
         } else {
             return CUnknown::NonDelegatingQueryInterface(riid, ppv);
         }
    
  4. 声明并实现 IMyInterface 的成员函数。

INonDelegatingUnknown若要用于嵌套接口,请执行以下步骤:

  1. 声明派生自 CUnknown 的类。

  2. 在类定义中包含 DECLARE_IUNKNOWN

  3. 重写 NonDelegatingQueryInterface 以使用以下代码公开 IMyInterface:

         if (riid == IID_IMyInterface) {
             return GetInterface((IMyInterface *) this, ppv);
         } else {
             return CUnknown::NonDelegatingQueryInterface(riid, ppv);
         }
    
  4. 实现 IMyInterface 的成员函数。 使用 CUnknown::GetOwner 访问 COM 对象类。

  5. 在 COM 对象类中,使嵌套类成为 COM 对象类的友元,并将嵌套类的实例声明为 COM 对象类的成员。

由于必须始终将外部未知和 HRESULT 传递给 CUnknown 构造函数,因此不能使用默认构造函数。 你必须使成员变量成为指向类的指针,并在构造函数中发出新的调用以实际创建该变量。

使用如下代码替代 NonDelegatingQueryInterface

     if (riid == IID_IMyInterface) {
         return m_pImplFilter->
            NonDelegatingQueryInterface(IID_IMyInterface, ppv);
     } else {
         return CUnknown::NonDelegatingQueryInterface(riid, ppv);
     }

可以通过多个继承支持某些接口的混合类,以及通过嵌套类支持某些接口的一些接口。

要求

要求 Value
标头
Combase.h (包括 Streams.h)

Strmbase.lib (零售版) ;
Strmbasd.lib (调试生成)

另请参阅

COM 帮助程序函数