Dela via


Steg 10. Stöd för COM-registrering

[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]

Den sista återstående uppgiften är att understödja COM-registrering så att egenskapsramen kan skapa nya instanser av din egenskapssida. Lägg till ytterligare en CFactoryTemplate- post i matrisen global g_Templates, som används för att registrera alla COM-objekt i din DLL. Ta inte med någon information om filteruppsättningen för egenskapssidan.

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

Om du deklarerar g_cTemplates enligt följande kod har den automatiskt rätt värde baserat på matrisstorleken:

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

Lägg också till en statisk CreateInstance-metod i egenskapssidans klass. Du kan ge metoden namnet vad du vill, men signaturen måste matcha den som visas i följande exempel:

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

Om du vill testa egenskapssidan registrerar du DLL:en och läser sedan in filtret i GraphEdit. Högerklicka på filtret och välj Filteregenskaper.

Skapa en egenskapssida för filter

Hur man skapar en DirectShow-filter-DLL