INonDelegatingUnknown

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Audio/Video Capture di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Antarmuka INonDelegatingUnknown adalah versi IUnknown yang diganti namanya untuk mengaktifkan dukungan untuk antarmuka IUnknown yang tidak mendelegasikan dan mendelegasikan di objek COM yang sama.

Sintaks

interface INonDelegatingUnknown
{
    virtual HRESULT NonDelegatingQueryInterface(REFIID riid, LPVOID *ppv) PURE;
    virtual ULONG NonDelegatingAddRef(void) PURE;
    virtual ULONG NonDelegatingRelease(void) PURE;
};

Keterangan

Untuk menggunakan INonDelegatingUnknown beberapa pewarisan, lakukan langkah-langkah berikut.

  1. Dapatkan kelas Anda dari antarmuka, misalnya, IMyInterface.

  2. Sertakan DECLARE_IUNKNOWN dalam definisi kelas Anda untuk mendeklarasikan implementasi QueryInterface, AddRef, dan Release yang menyebut luar tidak diketahui.

  3. Ganti NonDelegatingQueryInterface untuk mengekspos IMyInterface dengan kode seperti berikut:

         if (riid == IID_IMyInterface) {
             return GetInterface((IMyInterface *) this, ppv);
         } else {
             return CUnknown::NonDelegatingQueryInterface(riid, ppv);
         }
    
  4. Nyatakan dan terapkan fungsi anggota IMyInterface.

Untuk menggunakan INonDelegatingUnknown antarmuka berlapis, lakukan langkah-langkah berikut:

  1. Nyatakan kelas yang berasal dari CUnknown.

  2. Sertakan DECLARE_IUNKNOWN dalam definisi kelas Anda.

  3. Ganti NonDelegatingQueryInterface untuk mengekspos IMyInterface dengan kode seperti berikut:

         if (riid == IID_IMyInterface) {
             return GetInterface((IMyInterface *) this, ppv);
         } else {
             return CUnknown::NonDelegatingQueryInterface(riid, ppv);
         }
    
  4. Menerapkan fungsi anggota IMyInterface. Gunakan CUnknown::GetOwner untuk mengakses kelas objek COM.

  5. Di kelas objek COM Anda, jadikan kelas berlapis sebagai teman kelas objek COM, dan nyatakan instans kelas berlapis sebagai anggota kelas objek COM.

Karena Anda harus selalu meneruskan outer unknown dan HRESULT ke konstruktor CUnknown , Anda tidak dapat menggunakan konstruktor default. Anda harus menjadikan variabel anggota sebagai penunjuk ke kelas dan melakukan panggilan baru di konstruktor Anda untuk benar-benar membuatnya.

Ganti NonDelegatingQueryInterface dengan kode seperti berikut ini:

     if (riid == IID_IMyInterface) {
         return m_pImplFilter->
            NonDelegatingQueryInterface(IID_IMyInterface, ppv);
     } else {
         return CUnknown::NonDelegatingQueryInterface(riid, ppv);
     }

Anda dapat memiliki kelas campuran yang mendukung beberapa antarmuka melalui beberapa pewarisan dan beberapa antarmuka melalui kelas berlapis.

Persyaratan

Persyaratan Nilai
Header
Combase.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)

Lihat juga

Fungsi Pembantu COM