Compartilhar via


Etapa 10. Suporte ao registro COM

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na 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 Captura de Áudio/Vídeo no 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 última tarefa restante é dar suporte ao registro COM, para que o quadro de propriedades possa criar novas instâncias da página de propriedades. Adicione outra entrada CFactoryTemplate à matriz de g_Templates global, que é usada para registrar todos os objetos COM em sua DLL. Não inclua nenhuma informação de configuração de filtro para a página de propriedades.

const AMOVIESETUP_FILTER FilterSetupData = 
{ 
    /* Not shown ... */
};

CFactoryTemplate g_Templates[] =
{   
    // This entry is for the filter.
    {
        wszName,
        &CLSID_GrayFilter,
        CGrayFilter::CreateInstance,
        NULL,
        &FilterSetupData 
    },
    // This entry is for the property page.
    { 
        L"Saturation Props",
        &CLSID_SaturationProp,
        CGrayProp::CreateInstance, 
        NULL, NULL
    }
};

Se você declarar g_cTemplates conforme mostrado no código a seguir, ele terá automaticamente o valor correto com base no tamanho da matriz:

int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]);

Além disso, adicione um método estático CreateInstance à classe de página de propriedades. Você pode nomear o método como preferir, mas a assinatura deve corresponder à mostrada no exemplo a seguir:

static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
{
    CGrayProp *pNewObject = new CGrayProp(pUnk);
    if (pNewObject == NULL) 
    {
        *pHr = E_OUTOFMEMORY;
    }
    return pNewObject;
} 

Para testar a página de propriedades, registre a DLL e carregue o filtro em GraphEdit. Clique com o botão direito do mouse no filtro e selecione Filtrar Propriedades.

Criando uma página de propriedades de filtro

Como criar uma DLL de filtro DirectShow