Partager via


Étape 10. Prise en charge de l’inscription COM

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

La dernière tâche restante consiste à prendre en charge l’inscription COM, afin que le cadre de propriété puisse créer de nouvelles instances de votre page de propriétés. Ajoutez une autre entrée CFactoryTemplate au tableau g_Templates global, qui permet d’inscrire tous les objets COM dans votre DLL. N’incluez aucune information de configuration 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 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.

Création d’une page de propriétés de filtre

Guide pratique pour créer une DLL de filtre DirectShow