Kelas CComEnum
Kelas ini mendefinisikan objek enumerator COM berdasarkan array.
Sintaks
template <class Base,
const IID* piid, class T, class Copy, class ThreadModel = CcomObjectThreadModel>
class ATL_NO_VTABLE CComEnum : public CComEnumImpl<Base, piid,
T,
Copy>,
public CComObjectRootEx<ThreadModel>
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.
ThreadModel
Model utas kelas. Parameter ini default ke model utas objek global yang digunakan dalam proyek Anda.
Keterangan
CComEnum
menentukan objek enumerator COM berdasarkan array. Kelas ini dianalogikan dengan CComEnumOnSTL yang mengimplementasikan enumerator berdasarkan kontainer Pustaka Standar C++. Langkah-langkah umum untuk menggunakan kelas ini diuraikan di bawah ini. Untuk informasi selengkapnya, lihat Koleksi dan Enumerator ATL.
Untuk menggunakan kelas ini:
typedef
spesialisasi kelas ini.typedef
Gunakan sebagai argumen templat dalam spesialisasiCComObject
.Buat instans
CComObject
spesialisasi.Inisialisasi objek enumerator dengan memanggil CComEnumImpl::Init.
Mengembalikan antarmuka enumerator ke klien.
Hierarki Warisan
CComObjectRootBase
Base
CComEnum
Persyaratan
Header: atlcom.h
Contoh
Kode yang ditunjukkan di bawah ini menyediakan fungsi yang dapat digunakan kembali untuk membuat dan menginisialisasi objek enumerator.
template <class EnumType, class ElementType>
HRESULT CreateEnumerator(IUnknown** ppUnk, ElementType* begin, ElementType* end,
IUnknown* pUnk, CComEnumFlags flags)
{
if (ppUnk == NULL)
return E_POINTER;
*ppUnk = NULL;
CComObject<EnumType>* pEnum = NULL;
HRESULT hr = CComObject<EnumType>::CreateInstance(&pEnum);
if (FAILED(hr))
return hr;
hr = pEnum->Init(begin, end, pUnk, flags);
if (SUCCEEDED(hr))
hr = pEnum->QueryInterface(ppUnk);
if (FAILED(hr))
delete pEnum;
return hr;
} // CreateEnumerator
Templat fungsi ini dapat digunakan untuk mengimplementasikan _NewEnum
properti antarmuka koleksi seperti yang ditunjukkan di bawah ini:
typedef CComEnum<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _Copy<VARIANT> > VarArrEnum;
class ATL_NO_VTABLE CVariantArrayCollection :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CVariantArrayCollection, &CLSID_VariantArrayCollection>,
public IDispatchImpl<IVariantArrayCollection, &IID_IVariantArrayCollection, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
VARIANT m_arr[3];
public:
STDMETHOD(get__NewEnum)(IUnknown** ppUnk)
{
return CreateEnumerator<VarArrEnum>(ppUnk, &m_arr[0], &m_arr[3], this,
AtlFlagNoCopy);
}
// Remainder of class declaration omitted.
Kode ini membuat typedef
untuk CComEnum
yang mengekspos vektor VARIAN Melalui IEnumVariant
antarmuka. Kelas CVariantArrayCollection
hanya mengkhususkan CreateEnumerator
diri untuk bekerja dengan objek enumerator jenis ini dan meneruskan argumen yang diperlukan.
Lihat juga
Gambaran Umum Kelas
CComObjectThreadModel
Kelas CComEnumImpl
Kelas CComObjectRootEx