Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
[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.
Dapatkan kelas Anda dari antarmuka, misalnya, IMyInterface.
Sertakan DECLARE_IUNKNOWN dalam definisi kelas Anda untuk mendeklarasikan implementasi QueryInterface, AddRef, dan Release yang menyebut luar tidak diketahui.
Ganti NonDelegatingQueryInterface untuk mengekspos IMyInterface dengan kode seperti berikut:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
Nyatakan dan terapkan fungsi anggota IMyInterface.
Untuk menggunakan INonDelegatingUnknown
antarmuka berlapis, lakukan langkah-langkah berikut:
Nyatakan kelas yang berasal dari CUnknown.
Sertakan DECLARE_IUNKNOWN dalam definisi kelas Anda.
Ganti NonDelegatingQueryInterface untuk mengekspos IMyInterface dengan kode seperti berikut:
if (riid == IID_IMyInterface) { return GetInterface((IMyInterface *) this, ppv); } else { return CUnknown::NonDelegatingQueryInterface(riid, ppv); }
Menerapkan fungsi anggota IMyInterface. Gunakan CUnknown::GetOwner untuk mengakses kelas objek COM.
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 |
|
Pustaka |
|
Lihat juga