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.
Tópicos relacionados