Krok 3. Obsługa QueryInterface

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w ramach Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Aby uwidocznić nowe interfejsy filtru dla klientów, wykonaj następujące czynności:

  • Uwzględnij makro DECLARE_IUNKNOWN w sekcji deklaracji publicznej filtru:

    public:
        DECLARE_IUNKNOWN;
    
  • Zastąp CUnknown::NonDelegatingQueryInterface, aby sprawdzić identyfikatory IID dla dwóch interfejsów:

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

Następnie: Krok 4. Utwórz stronę właściwości.

Tworzenie Strony Właściwości Filtru

Jak zaimplementować IUnknown