Bagikan melalui


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 spesialisasi CComObject.

  • Buat instans CComObject spesialisasi.

  • Inisialisasi objek enumerator dengan memanggil CComEnumImpl::Init.

  • Mengembalikan antarmuka enumerator ke klien.

Hierarki Warisan

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

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