Udostępnij za pośrednictwem


Klasa CComEnum

Ta klasa definiuje obiekt modułu wyliczającego COM na podstawie tablicy.

Składnia

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>

Parametry

Baza
Interfejs modułu wyliczającego COM. Zobacz przykład IEnumString .

piid
Wskaźnik do identyfikatora interfejsu interfejsu modułu wyliczającego.

T
Typ elementu uwidocznionego przez interfejs modułu wyliczającego.

kopia
Homogeniczną klasę zasad kopiowania.

ThreadModel
Model wątkowy klasy. Ten parametr jest domyślny dla globalnego modelu wątku obiektu używanego w projekcie.

Uwagi

CComEnum definiuje obiekt modułu wyliczającego COM na podstawie tablicy. Ta klasa jest analogiczna do biblioteki CComEnumOnSTL , która implementuje moduł wyliczający oparty na kontenerze biblioteki standardowej języka C++. Poniżej przedstawiono typowe kroki korzystania z tej klasy. Aby uzyskać więcej informacji, zobacz Kolekcje i moduły wyliczania ATL.

Aby użyć tej klasy:

  • typedef specjalizacja tej klasy.

  • typedef Użyj jako argumentu szablonu w specjalizacji .CComObject

  • Utwórz wystąpienie specjalizacji CComObject .

  • Zainicjuj obiekt modułu wyliczającego, wywołując polecenie CComEnumImpl::Init.

  • Zwróć interfejs modułu wyliczającego do klienta.

Hierarchia dziedziczenia

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Wymagania

Nagłówek: atlcom.h

Przykład

Poniższy kod udostępnia funkcję wielokrotnego użytku do tworzenia i inicjowania obiektu modułu wyliczającego.

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

Za pomocą tego szablonu funkcji można zaimplementować _NewEnum właściwość interfejsu kolekcji, jak pokazano poniżej:

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.

Ten kod tworzy typedef element , CComEnum który uwidacznia wektor VARIANTów za pośrednictwem interfejsu IEnumVariant . Klasa CVariantArrayCollection po prostu specjalizuje się CreateEnumerator w pracy z obiektami modułu wyliczającego tego typu i przekazuje niezbędne argumenty.

Zobacz też

Omówienie klasy
CComObjectThreadModel
Klasa CComEnumImpl
Klasa CComObjectRootEx