Bagikan melalui


Kelas CComPolyObject

Kelas ini mengimplementasikan IUnknown untuk objek agregat atau nonaggregated.

Sintaks

template<class contained>
class CComPolyObject : public IUnknown,
      public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>

Parameter

Terkandung
Kelas Anda, berasal dari CComObjectRoot atau CComObjectRootEx, serta dari antarmuka lain yang ingin Anda dukung pada objek.

Anggota

Konstruktor Publik

Nama Deskripsi
CComPolyObject::CComPolyObject Konstruktor.
CComPolyObject::~CComPolyObject Destruktor.

Metode Publik

Nama Deskripsi
CComPolyObject::AddRef Menaikkan jumlah referensi objek.
CComPolyObject::CreateInstance (Statis) Memungkinkan Anda membuat objek CComPolyObject ><contained baru tanpa overhead CoCreateInstance.
CComPolyObject::FinalConstruct Melakukan inisialisasi akhir .m_contained
CComPolyObject::FinalRelease Melakukan penghancuran m_containedakhir .
CComPolyObject::QueryInterface Mengambil penunjuk ke antarmuka yang diminta.
CComPolyObject::Release Mengurangi jumlah referensi objek.

Anggota Data Publik

Nama Deskripsi
CComPolyObject::m_contained Mendelegasikan IUnknown panggilan ke luar yang tidak diketahui jika objek dikumpulkan atau ke IUnknown objek jika objek tidak dikumpulkan.

Keterangan

CComPolyObjectmengimplementasikan IUnknown untuk objek agregat atau nonaggregated.

Saat instans CComPolyObject dibuat, nilai luar yang tidak diketahui diperiksa. Jika null, IUnknown diimplementasikan untuk objek nonaggregated. Jika yang tidak diketahui luar bukan NULL, IUnknown diimplementasikan untuk objek agregat.

Keuntungan menggunakannya CComPolyObject adalah Anda menghindari CComAggObject dan CComObject dalam modul Anda untuk menangani kasus agregat dan nonaggregated. Satu CComPolyObject objek menangani kedua kasus. Ini berarti hanya satu salinan vtable dan satu salinan fungsi yang ada di modul Anda. Jika vtable Anda besar, ini dapat secara substansial mengurangi ukuran modul Anda. Namun, jika vtable Anda kecil, penggunaan CComPolyObject dapat mengakibatkan ukuran modul yang sedikit lebih besar karena tidak dioptimalkan untuk objek agregat atau nonaggregated, apa adanya CComAggObject dan CComObject.

Jika makro DECLARE_POLY_AGGREGATABLE ditentukan dalam definisi kelas objek Anda, CComPolyObject akan digunakan untuk membuat objek Anda. DECLARE_POLY_AGGREGATABLE akan secara otomatis dideklarasikan jika Anda menggunakan Wizard Proyek ATL untuk membuat kontrol penuh atau kontrol Internet Explorer.

Jika diagregasi, CComPolyObject objek memiliki sendiri IUnknown, terpisah dari objek IUnknownluar , dan mempertahankan jumlah referensinya sendiri. CComPolyObjectmenggunakan CComContainedObject untuk mendelegasikan ke luar yang tidak diketahui.

Untuk informasi selengkapnya tentang agregasi, lihat artikel Dasar-Dasar Objek COM ATL.

Hierarki Warisan

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

Persyaratan

Header: atlcom.h

CComPolyObject::AddRef

Menaikkan jumlah referensi pada objek.

STDMETHOD_(ULONG, AddRef)();

Tampilkan Nilai

Nilai yang mungkin berguna untuk diagnostik atau pengujian.

CComPolyObject::CComPolyObject

Konstruktor.

CComPolyObject(void* pv);

Parameter

Pv
[di] Penunjuk ke luar tidak diketahui jika objek akan diagregasi, atau NULL jika objek jika objek tidak dikumpulkan.

Keterangan

Menginisialisasi CComContainedObject anggota data, m_contained, dan menaikkan jumlah kunci modul.

Destruktor mengurangi jumlah kunci modul.

CComPolyObject::~CComPolyObject

Destruktor.

~CComPolyObject();

Keterangan

Membebaskan semua sumber daya yang dialokasikan, memanggil FinalRelease, dan mengurangi jumlah kunci modul.

CComPolyObject::CreateInstance

Memungkinkan Anda membuat objek CComPolyObject ><containedbaru tanpa overhead CoCreateInstance.

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComPolyObject<contained>** pp);

Parameter

Pp
[out] Penunjuk ke penunjuk CComPolyObject><contained. Jika CreateInstance tidak berhasil, pp diatur ke NULL.

Tampilkan Nilai

Nilai HRESULT standar.

Keterangan

Objek yang dikembalikan memiliki jumlah referensi nol, jadi segera panggil AddRef , lalu gunakan Release untuk membebaskan referensi pada penunjuk objek setelah Anda selesai.

Jika Anda tidak memerlukan akses langsung ke objek, tetapi masih ingin membuat objek baru tanpa overhead CoCreateInstance, gunakan CComCoClass::CreateInstance sebagai gantinya.

CComPolyObject::FinalConstruct

Dipanggil selama tahap akhir konstruksi objek, metode ini melakukan inisialisasi akhir pada anggota data m_contained .

HRESULT FinalConstruct();

Tampilkan Nilai

Nilai HRESULT standar.

CComPolyObject::FinalRelease

Dipanggil selama penghancuran objek, metode ini membebaskan anggota data m_contained .

void FinalRelease();

CComPolyObject::m_contained

Objek CComContainedObject berasal dari kelas Anda.

CComContainedObject<contained> m_contained;

Parameter

Terkandung
[di] Kelas Anda, berasal dari CComObjectRoot atau CComObjectRootEx, serta dari antarmuka lain yang ingin Anda dukung pada objek.

Keterangan

IUnknown panggilan melalui m_contained didelegasikan ke luar yang tidak diketahui jika objek dikumpulkan, atau ke IUnknown objek ini jika objek tidak dikumpulkan.

CComPolyObject::QueryInterface

Mengambil penunjuk ke antarmuka yang diminta.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);

Parameter

Q
Antarmuka COM.

iid
[di] Pengidentifikasi antarmuka yang diminta.

ppvObject
[out] Penunjuk ke penunjuk antarmuka yang diidentifikasi oleh iid. Jika objek tidak mendukung antarmuka ini, ppvObject diatur ke NULL.

Pp
[out] Penunjuk ke antarmuka yang diidentifikasi oleh __uuidof(Q).

Tampilkan Nilai

Nilai HRESULT standar.

Keterangan

Untuk objek agregat, jika antarmuka yang diminta adalah IUnknown, QueryInterface mengembalikan penunjuk ke objek agregat sendiri IUnknown dan menaikkan jumlah referensi. Jika tidak, metode ini meminta antarmuka melalui CComContainedObject anggota data, m_contained.

CComPolyObject::Release

Mengurangi jumlah referensi pada objek.

STDMETHOD_(ULONG, Release)();

Tampilkan Nilai

Dalam build debug, Release mengembalikan nilai yang mungkin berguna untuk diagnostik atau pengujian. Dalam build nondebug, Release selalu mengembalikan 0.

Lihat juga

Kelas CComObjectRootEx
DECLARE_POLY_AGGREGATABLE
Gambaran Umum Kelas