Condividi tramite


Passaggio 10. Supporto della registrazione COM

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

L'ultima attività rimanente consiste nel supportare la registrazione COM, in modo che il frame delle proprietà possa creare nuove istanze della pagina delle proprietà. Aggiungere un'altra voce CFactoryTemplate alla matrice globale di g_Templates , usata per registrare tutti gli oggetti COM nella DLL. Non includere informazioni di configurazione del filtro per la pagina delle proprietà.

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 si dichiara g_cTemplates come illustrato nel codice seguente, il valore è corretto in base alle dimensioni della matrice:

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

Aggiungere anche un metodo statico CreateInstance alla classe della pagina delle proprietà. È possibile assegnare un nome al metodo che si preferisce, ma la firma deve corrispondere a quella illustrata nell'esempio seguente:

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

Per testare la pagina delle proprietà, registrare la DLL e quindi caricare il filtro in GraphEdit. Fare clic con il pulsante destro del mouse sul filtro e scegliere Filtra proprietà.

Creazione di una pagina delle proprietà Filter

Come creare una DLL del filtro DirectShow