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.

  1. Derive sua classe de uma interface, por exemplo, IMyInterface.

  2. Inclua DECLARE_IUNKNOWN em sua definição de classe para declarar implementações de QueryInterface, AddRef e Release que chamam o desconhecido externo.

  3. 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);
         }
    
  4. Declare e implemente as funções membro de IMyInterface.

Para usar INonDelegatingUnknown para interfaces aninhadas, execute as seguintes etapas:

  1. Declare uma classe derivada de CUnknown.

  2. Inclua DECLARE_IUNKNOWN na definição de classe.

  3. 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);
         }
    
  4. Implemente as funções membro de IMyInterface. Use CUnknown::GetOwner para acessar a classe de objeto COM.

  5. 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
Combase.h (inclua Streams.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)

Confira também

Funções auxiliares COM