Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[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