INonDelegatingUnknown
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Die INonDelegatingUnknown
Schnittstelle ist eine Version von IUnknown , die umbenannt wird, um die Unterstützung für nicht delegierende und delegierende IUnknown-Schnittstellen im selben 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;
};
Bemerkungen
Führen Sie die folgenden Schritte aus, um sie für die mehrfache Vererbung zu verwenden INonDelegatingUnknown
.
Leiten Sie Ihre Klasse von einer Schnittstelle ab, z. B. IMyInterface.
Schließen Sie DECLARE_IUNKNOWN in Ihre Klassendefinition ein, um Implementierungen von QueryInterface, AddRef und Release zu deklarieren, die das äußere Unbekannte aufrufen.
Ü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); }
Deklarieren und implementieren Sie die Memberfunktionen von IMyInterface.
Führen Sie zum Verwenden INonDelegatingUnknown
für geschachtelte Schnittstellen die folgenden Schritte aus:
Deklarieren Sie eine von CUnknown abgeleitete Klasse.
Schließen Sie DECLARE_IUNKNOWN in Ihre Klassendefinition ein.
Überschreiben Sie NonDelegatingQueryInterface , um IMyInterface mit dem folgenden Code verfügbar zu machen:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
Implementieren Sie die Memberfunktionen von IMyInterface. Verwenden Sie CUnknown::GetOwner , um auf die COM-Objektklasse zuzugreifen.
Machen Sie in Ihrer COM-Objektklasse die geschachtelte Klasse zu einem Freund der COM-Objektklasse, und deklarieren Sie einen instance 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 als Zeiger auf die -Klasse festlegen und einen neuen Aufruf in Ihrem Konstruktor tätigen, 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 haben, die einige Schnittstellen durch mehrere Vererbung und einige Schnittstellen über geschachtelte Klassen unterstützen.
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|
Siehe auch