Compartir a través de


Paso 10. Compatibilidad con el registro COM

[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 última tarea restante es admitir el registro COM, de modo que el marco de propiedad pueda crear nuevas instancias de la página de propiedades. Agregue otra entrada CFactoryTemplate a la matriz global g_Templates , que se usa para registrar todos los objetos COM en el archivo DLL. No incluya ninguna información de configuración de filtro para la página de propiedades.

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
    }
};

Si declara g_cTemplates como se muestra en el código siguiente, tendrá automáticamente el valor correcto en función del tamaño de la matriz:

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

Además, agregue un método estático CreateInstance a la clase de página de propiedades. Puede asignar un nombre al método que prefiera, pero la firma debe coincidir con la que se muestra en el ejemplo siguiente:

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

Para probar la página de propiedades, registre el archivo DLL y cargue el filtro en GraphEdit. Haga clic con el botón derecho en el filtro y seleccione Propiedades de filtro.

Crear una página de propiedades de filtro

Creación de un archivo DLL de filtro de DirectShow