INonDelegatingUnknown
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
La INonDelegatingUnknown
interfaz es una versión de IUnknown cuyo nombre se cambia para habilitar la compatibilidad con interfaces IUnknown que no son de delegación y delegación en el mismo objeto COM.
Sintaxis
interface INonDelegatingUnknown
{
virtual HRESULT NonDelegatingQueryInterface(REFIID riid, LPVOID *ppv) PURE;
virtual ULONG NonDelegatingAddRef(void) PURE;
virtual ULONG NonDelegatingRelease(void) PURE;
};
Observaciones
Para usar INonDelegatingUnknown
para la herencia múltiple, realice los pasos siguientes.
Derive la clase de una interfaz, por ejemplo, IMyInterface.
Incluya DECLARE_IUNKNOWN en la definición de clase para declarar implementaciones de QueryInterface, AddRef y Release que llaman al desconocido externo.
Invalide NonDelegatingQueryInterface para exponer IMyInterface con código como el siguiente:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
Declare e implemente las funciones miembro de IMyInterface.
Para usar INonDelegatingUnknown
para interfaces anidadas, realice los pasos siguientes:
Declare una clase derivada de CUnknown.
Incluya DECLARE_IUNKNOWN en la definición de clase.
Invalide NonDelegatingQueryInterface para exponer IMyInterface con el código como el siguiente:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
Implemente las funciones miembro de IMyInterface. Use CUnknown::GetOwner para tener acceso a la clase de objeto COM.
En la clase de objeto COM, convierta la clase anidada en un amigo de la clase de objeto COM y declare una instancia de la clase anidada como miembro de la clase de objeto COM.
Dado que siempre debe pasar el desconocido externo y un HRESULT al constructor CUnknown , no puede usar un constructor predeterminado. Debe convertir la variable miembro en un puntero a la clase y realizar una nueva llamada en el constructor para crearla realmente.
Invalide NonDelegatingQueryInterface con código como el siguiente:
if (riid == IID_IMyInterface) {
return m_pImplFilter->
NonDelegatingQueryInterface(IID_IMyInterface, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
Puede tener clases mixtas que admitan algunas interfaces mediante la herencia múltiple y algunas interfaces a través de clases anidadas.
Requisitos
Requisito | Value |
---|---|
Encabezado |
|
Biblioteca |
|
Consulte también