Étape 10. Prise en charge de l’inscription COM
La dernière tâche restante consiste à prendre en charge l’inscription COM, afin que le frame de propriété puisse créer des instances de votre page de propriétés. Ajoutez une autre entrée CFactoryTemplate au tableau global g _ Templates , qui est utilisé pour inscrire tous les objets COM dans votre dll. N’incluez pas d’informations de paramétrage de filtre pour la page de propriétés.
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 vous déclarez g _ cTemplates comme indiqué dans le code suivant, il a automatiquement la valeur correcte en fonction de la taille du tableau :
int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]);
Ajoutez également une méthode statique CreateInstance à la classe de la page de propriétés. Vous pouvez nommer la méthode comme vous le souhaitez, mais la signature doit correspondre à celle illustrée dans l’exemple suivant :
static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)
{
CGrayProp *pNewObject = new CGrayProp(pUnk);
if (pNewObject == NULL)
{
*pHr = E_OUTOFMEMORY;
}
return pNewObject;
}
Pour tester la page de propriétés, inscrivez la DLL, puis chargez le filtre dans GraphEdit. Cliquez avec le bouton droit sur le filtre et sélectionnez Propriétés du filtre.