INonDelegatingUnknown

Die INonDelegatingUnknown Schnittstelle ist eine Version von IUnknown, die umbenannt wird, um unterstützung für nicht delegierende und delegierende IUnknown-Schnittstellen im gleichen COM-Objekt zu ermöglichen.

Syntax

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

Hinweise

Führen INonDelegatingUnknown Sie die folgenden Schritte aus, um für mehrfache Vererbung zu verwenden.

  1. Leiten Sie Ihre Klasse von einer Schnittstelle ab, z. B. IMyInterface.

  2. Schließen Sie DECLARE _ IUNKNOWN in Ihre Klassendefinition ein, um Implementierungen von QueryInterface, AddRef und Release zu deklarieren, die das äußere Unbekannte aufrufen.

  3. Überschreiben Sie NonDelegatingQueryInterface, um IMyInterface mit Code wie dem folgenden verfügbar zu machen:

         if (riid == IID_IMyInterface) {
             return GetInterface((IMyInterface *) this, ppv);
         } else {
             return CUnknown::NonDelegatingQueryInterface(riid, ppv);
         }
    
  4. Deklarieren und implementieren Sie die Memberfunktionen von IMyInterface.

Führen INonDelegatingUnknown Sie die folgenden Schritte aus, um für geschachtelte Schnittstellen zu verwenden:

  1. Deklarieren Sie eine von CUnknownabgeleitete Klasse.

  2. Schließen Sie DECLARE _ IUNKNOWN in Ihre Klassendefinition ein.

  3. Überschreiben Sie NonDelegatingQueryInterface, um IMyInterface mit dem Folgenden verfügbar zu machen:

         if (riid == IID_IMyInterface) {
             return GetInterface((IMyInterface *) this, ppv);
         } else {
             return CUnknown::NonDelegatingQueryInterface(riid, ppv);
         }
    
  4. Implementieren Sie die Memberfunktionen von IMyInterface. Verwenden Sie CUnknown::GetOwner, um auf die COM-Objektklasse zuzugreifen.

  5. Machen Sie die geschachtelte Klasse in ihrer COM-Objektklasse zu einem Friend der COM-Objektklasse, und deklarieren Sie eine Instanz der geschachtelten Klasse als Member der COM-Objektklasse.

Da Sie immer das äußere Unbekannte und ein HRESULT an den CUnknown-Konstruktor übergeben müssen, können Sie keinen Standardkonstruktor verwenden. Sie müssen die Membervariable zu einem Zeiger auf die Klasse machen und einen neuen Aufruf in Ihrem Konstruktor vornehmen, um sie tatsächlich zu erstellen.

Überschreiben Sie NonDelegatingQueryInterface mit Code wie dem folgenden:

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

Sie können gemischte Klassen verwenden, die einige Schnittstellen durch mehrere Vererbung unterstützen, und einige Schnittstellen über geschachtelte Klassen.

Anforderungen

Anforderung Wert
Header
Combase.h (include Streams.h)
Bibliothek
Strmbase.lib (Verkaufsbuilds);
Strmbasd.lib (Debugbuilds)

Siehe auch

COM-Hilfsfunktionen