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.