Inondelegatingunknown
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
A INonDelegatingUnknown
interface é uma versão do IUnknown que é renomeada para habilitar o suporte para interfaces IUnknown não delegantes e delegadas no mesmo objeto COM.
Sintaxe
interface INonDelegatingUnknown
{
virtual HRESULT NonDelegatingQueryInterface(REFIID riid, LPVOID *ppv) PURE;
virtual ULONG NonDelegatingAddRef(void) PURE;
virtual ULONG NonDelegatingRelease(void) PURE;
};
Comentários
Para usar INonDelegatingUnknown
para várias heranças, execute as etapas a seguir.
Derive sua classe de uma interface, por exemplo, IMyInterface.
Inclua DECLARE_IUNKNOWN em sua definição de classe para declarar implementações de QueryInterface, AddRef e Release que chamam o desconhecido externo.
Substitua NonDelegatingQueryInterface para expor IMyInterface com código como o seguinte:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
Declare e implemente as funções membro de IMyInterface.
Para usar INonDelegatingUnknown
para interfaces aninhadas, execute as seguintes etapas:
Declare uma classe derivada de CUnknown.
Inclua DECLARE_IUNKNOWN na definição de classe.
Substitua NonDelegatingQueryInterface para expor IMyInterface com o código como o seguinte:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
Implemente as funções membro de IMyInterface. Use CUnknown::GetOwner para acessar a classe de objeto COM.
Na classe de objeto COM, torne a classe aninhada uma amiga da classe de objeto COM e declare uma instância da classe aninhada como um membro da classe de objeto COM.
Como você sempre deve passar o desconhecido externo e um HRESULT para o construtor CUnknown , você não pode usar um construtor padrão. Você precisa tornar a variável de membro um ponteiro para a classe e fazer uma nova chamada no construtor para realmente criá-la.
Substitua NonDelegatingQueryInterface por um código como o seguinte:
if (riid == IID_IMyInterface) {
return m_pImplFilter->
NonDelegatingQueryInterface(IID_IMyInterface, ppv);
} else {
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
Você pode ter classes mistas que dão suporte a algumas interfaces por meio de várias heranças e algumas interfaces por meio de classes aninhadas.
Requisitos
Requisito | Valor |
---|---|
parâmetro |
|
Biblioteca |
|
Confira também