Kelas CComEnumImpl
Kelas ini menyediakan implementasi untuk antarmuka enumerator COM tempat item yang dijumlahkan disimpan dalam array.
Sintaks
template <class Base,
const IID* piid, class T, class Copy>
class ATL_NO_VTABLE CComEnumImpl : public Base
Parameter
Dasar
Antarmuka enumerator COM. Lihat IEnumString untuk contoh.
piid
Penunjuk ke ID antarmuka antarmuka enumerator.
T
Jenis item yang diekspos oleh antarmuka enumerator.
Menyalin
Kelas kebijakan penyalinan homogen.
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CComEnumImpl::CComEnumImpl | Konstruktor. |
CComEnumImpl::~CComEnumImpl | Destruktor. |
Metode Publik
Nama | Deskripsi |
---|---|
CComEnumImpl::Clone | Implementasi metode antarmuka enumerasi Kloning . |
CComEnumImpl::Init | Menginisialisasi enumerator. |
CComEnumImpl::Berikutnya | Implementasi Next. |
CComEnumImpl::Reset | Implementasi Reset. |
CComEnumImpl::Lewati | Implementasi Skip. |
Anggota Data Publik
Nama | Deskripsi |
---|---|
CComEnumImpl::m_begin | Penunjuk ke item pertama dalam array. |
CComEnumImpl::m_dwFlags | Salin bendera yang diteruskan melalui Init . |
CComEnumImpl::m_end | Penunjuk ke lokasi tepat di luar item terakhir dalam array. |
CComEnumImpl::m_iter | Penunjuk ke item saat ini dalam array. |
CComEnumImpl::m_spUnk | Penunjuk IUnknown objek yang memasok koleksi yang sedang dijumlahkan. |
Keterangan
Lihat IEnumString untuk contoh implementasi metode. CComEnumImpl
menyediakan implementasi untuk antarmuka enumerator COM tempat item yang dijumlahkan disimpan dalam array. Kelas ini dianalogikan dengan IEnumOnSTLImpl
kelas , yang menyediakan implementasi antarmuka enumerator berdasarkan kontainer Pustaka Standar C++.
Catatan
Untuk detail tentang perbedaan lebih lanjut antara CComEnumImpl
dan IEnumOnSTLImpl
, lihat CComEnumImpl::Init.
Biasanya, Anda tidak perlu membuat kelas enumerator Anda sendiri dengan turunan dari implementasi antarmuka ini. Jika Anda ingin menggunakan enumerator yang disediakan ATL berdasarkan array, lebih umum untuk membuat instans CComEnum.
Namun, jika Anda perlu menyediakan enumerator kustom (misalnya, yang mengekspos antarmuka selain antarmuka enumerator), Anda dapat berasal dari kelas ini. Dalam situasi ini, kemungkinan Anda harus mengambil alih metode CComEnumImpl::Clone untuk menyediakan implementasi Anda sendiri.
Untuk informasi selengkapnya, lihat Koleksi dan Enumerator ATL.
Hierarki Warisan
Base
CComEnumImpl
Persyaratan
Header: atlcom.h
CComEnumImpl::CComEnumImpl
Konstruktor.
CComEnumImpl();
CComEnumImpl::~CComEnumImpl
Destruktor.
~CComEnumImpl();
CComEnumImpl::Init
Anda harus memanggil metode ini sebelum meneruskan penunjuk ke antarmuka enumerator kembali ke klien mana pun.
HRESULT Init(
T* begin,
T* end,
IUnknown* pUnk,
CComEnumFlags flags = AtlFlagNoCopy);
Parameter
mulai
Penunjuk ke elemen pertama array yang berisi item yang akan dijumlahkan.
akhir
Penunjuk ke lokasi tepat di luar elemen terakhir array yang berisi item yang akan dijumlahkan.
Punk
[di] Penunjuk IUnknown
objek yang harus tetap hidup selama masa pakai enumerator. Teruskan NULL jika tidak ada objek tersebut.
flags
Bendera yang menentukan apakah enumerator harus mengambil kepemilikan array atau membuat salinannya atau tidak. Nilai yang mungkin dijelaskan di bawah ini.
Tampilkan Nilai
Nilai HRESULT standar.
Keterangan
Hanya panggil metode ini sekali — inisialisasi enumerator, gunakan, lalu buang.
Jika Anda meneruskan penunjuk ke item dalam array yang disimpan di objek lain (dan Anda tidak meminta enumerator untuk menyalin data), Anda dapat menggunakan parameter pUnk untuk memastikan bahwa objek dan array yang dipegangnya tersedia selama enumerator membutuhkannya. Enumerator hanya memegang referensi COM pada objek untuk membuatnya tetap hidup. Referensi COM secara otomatis dirilis ketika enumerator dihancurkan.
Parameter bendera memungkinkan Anda menentukan bagaimana enumerator harus memperlakukan elemen array yang diteruskan ke dalamnya. bendera dapat mengambil salah satu nilai dari enumerasi yang CComEnumFlags
ditunjukkan di bawah ini:
enum CComEnumFlags
{
AtlFlagNoCopy = 0,
AtlFlagTakeOwnership = 2, // BitOwn
AtlFlagCopy = 3 // BitOwn | BitCopy
};
AtlFlagNoCopy
berarti bahwa masa pakai array tidak dikontrol oleh enumerator. Dalam hal ini, array akan statis atau objek yang diidentifikasi oleh pUnk akan bertanggung jawab untuk membebaskan array ketika tidak lagi diperlukan.
AtlFlagTakeOwnership
berarti bahwa penghancuran array akan dikendalikan oleh enumerator. Dalam hal ini, array harus dialokasikan secara dinamis menggunakan new
. Enumerator akan menghapus array di destruktornya. Biasanya, Anda akan meneruskan NULL untuk pUnk, meskipun Anda masih dapat meneruskan pointer yang valid jika Anda perlu diberi tahu tentang penghancuran enumerator karena alasan tertentu.
AtlFlagCopy
berarti bahwa array baru akan dibuat dengan menyalin array yang diteruskan ke Init
. Masa pakai array baru akan dikontrol oleh enumerator. Enumerator akan menghapus array di destruktornya. Biasanya, Anda akan meneruskan NULL untuk pUnk, meskipun Anda masih dapat meneruskan pointer yang valid jika Anda perlu diberi tahu tentang penghancuran enumerator karena alasan tertentu.
Catatan
Prototipe metode ini menentukan elemen array sebagai jenis T
, di mana T
didefinisikan sebagai parameter templat ke kelas . Ini adalah jenis yang sama yang diekspos dengan metode antarmuka COM CComEnumImpl::Next. Implikasinya adalah bahwa, tidak seperti IEnumOnSTLImpl, kelas ini tidak mendukung penyimpanan yang berbeda dan jenis data yang diekspos. Jenis data elemen dalam array harus sama dengan jenis data yang diekspos dengan cara antarmuka COM.
CComEnumImpl::Clone
Metode ini menyediakan implementasi metode Kloning dengan membuat objek jenis CComEnum
, menginisialisasinya dengan array dan iterator yang sama yang digunakan oleh objek saat ini, dan mengembalikan antarmuka pada objek yang baru dibuat.
STDMETHOD(Clone)(Base** ppEnum);
Parameter
ppEnum
[out] Antarmuka enumerator pada objek yang baru dibuat dikloning dari enumerator saat ini.
Tampilkan Nilai
Nilai HRESULT standar.
Keterangan
Perhatikan bahwa enumerator kloning tidak pernah membuat salinan mereka sendiri (atau mengambil kepemilikan) data yang digunakan oleh enumerator asli. Jika perlu, enumerator kloning akan menjaga enumerator asli tetap hidup (menggunakan referensi COM) untuk memastikan bahwa data tersedia selama mereka membutuhkannya.
CComEnumImpl::m_spUnk
Penunjuk cerdas ini mempertahankan referensi pada objek yang diteruskan ke CComEnumImpl::Init, memastikan bahwa itu tetap hidup selama masa pakai enumerator.
CComPtr<IUnknown> m_spUnk;
CComEnumImpl::m_begin
Penunjuk ke lokasi tepat di luar elemen terakhir array yang berisi item yang akan dijumlahkan.
T* m_begin;
CComEnumImpl::m_end
Penunjuk ke elemen pertama array yang berisi item yang akan dijumlahkan.
T* m_end;
CComEnumImpl::m_iter
Penunjuk ke elemen array saat ini yang berisi item yang akan dijumlahkan.
T* m_iter;
CComEnumImpl::m_dwFlags
Bendera diteruskan ke CComEnumImpl::Init.
DWORD m_dwFlags;
CComEnumImpl::Berikutnya
Metode ini menyediakan implementasi metode Berikutnya .
STDMETHOD(Next)(ULONG celt, T* rgelt, ULONG* pceltFetched);
Parameter
celt
[di] Jumlah elemen yang diminta.
rgelt
[out] Array yang akan diisi dengan elemen.
pceltFetched
[out] Jumlah elemen benar-benar dikembalikan dalam rgelt. Ini bisa kurang dari celt jika kurang dari elemen celt tetap ada dalam daftar.
Tampilkan Nilai
Nilai HRESULT standar.
CComEnumImpl::Reset
Metode ini menyediakan implementasi metode Reset .
STDMETHOD(Reset)(void);
Tampilkan Nilai
Nilai HRESULT standar.
CComEnumImpl::Lewati
Metode ini menyediakan implementasi metode Lewati.
STDMETHOD(Skip)(ULONG celt);
Parameter
celt
[di] Jumlah elemen yang akan dilewati.
Tampilkan Nilai
Nilai HRESULT standar.
Keterangan
Mengembalikan E_INVALIDARG jika celt adalah nol, mengembalikan S_FALSE jika kurang dari elemen celt dikembalikan, mengembalikan S_OK sebaliknya.