Auf Englisch lesen

Freigeben über


Schritt 10. Unterstützung der COM-Registrierung

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Die letzte verbleibende Aufgabe besteht darin, die COM-Registrierung zu unterstützen, damit der Eigenschaftenrahmen neue Instanzen ihrer Eigenschaftenseite erstellen kann. Fügen Sie dem globalen g_Templates Array einen weiteren CFactoryTemplate-Eintrag hinzu, der zum Registrieren aller COM-Objekte in Ihrer DLL verwendet wird. Fügen Sie keine Filtersetupinformationen für die Eigenschaftenseite ein.

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

Wenn Sie g_cTemplates deklarieren, wie im folgenden Code gezeigt, weist er basierend auf der Arraygröße automatisch den richtigen Wert auf:

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

Fügen Sie außerdem der Eigenschaftenseitenklasse eine statische CreateInstance Methode hinzu. Sie können die Methode beliebig benennen, aber die Signatur muss der im folgenden Beispiel gezeigten Signatur entsprechen:

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

Um die Eigenschaftenseite zu testen, registrieren Sie die DLL, und laden Sie dann den Filter in GraphEdit. Klicken Sie mit der rechten Maustaste auf den Filter, und wählen Sie Filtereigenschaften aus.

Erstellen einer Filtereigenschaftenseite

Erstellen einer DirectShow-Filter-DLL