Condividi tramite


Passaggio 3. Supporto di QueryInterface

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Per esporre le nuove interfacce del filtro ai client, eseguire le operazioni seguenti:

  • Includere la macro DECLARE_IUNKNOWN nella sezione dichiarazione pubblica del filtro:

    public:
        DECLARE_IUNKNOWN;
    
  • Eseguire l'override di CUnknown::NonDelegatingQueryInterface per verificare la presenza degli ID delle due interfacce:

    STDMETHODIMP CGrayFilter::NonDelegatingQueryInterface(REFIID riid, void **ppv)
    {
        if (riid == IID_ISpecifyPropertyPages)
        {
            return GetInterface(
               static_cast<ISpecifyPropertyPages*>(this),
               ppv);
        }
        else if (riid == IID_ISaturation)
        {
            return GetInterface(static_cast<ISaturation*>(this), ppv);
        }
        else
        {
            // Call the parent class.
            return CBaseFilter::NonDelegatingQueryInterface(riid, ppv);
    
            // NOTE: This example assumes that the filter inherits directly
            // from CBaseFilter. If your filter inherits from another class,
            // call the NonDelegatingQueryInterface method of that class.
        }
    }
    

Avanti: Passaggio 4. Creare la pagina delle proprietà.

Creazione di una pagina delle proprietà Filter

Come implementare IUnknown