Udostępnij za pośrednictwem


Klasa CComEnum

Ta klasa definiuje obiekt enumerator COM oparte na tablicy.

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

  • Base
    Modułu wyliczającego COM (IEnumXXXX) interfejsu.

  • piid
    Wskaźnik na identyfikator interfejsu interfejsu modułu wyliczającego.

  • T
    Typ elementu przez interfejs moduł wyliczający.

  • Copy
    Jednorodnej kopię zasad klasy.

  • ThreadModel
    Model wątka klasy.Ten parametr jest domyślnie modelu wątków Obiekt globalny używany w projekcie.

Uwagi

CComEnumdefiniuje obiekt enumerator COM oparte na tablicy.Ta klasa jest analogiczne do CComEnumOnSTL który implementuje moduł wyliczający kontenerowi STL.Typowe kroki tej klasy są przedstawione poniżej.Aby uzyskać więcej informacji, zobacz Kolekcje ATL i moduły wyliczające.

Aby użyć tej klasy:

  • typedefspecjalizacji tej klasy.

  • Użyj typedef jako argument szablonu specjalizacji z CComObject.

  • Tworzenie instancji CComObject specjalizacji.

  • Zainicjowanie obiektu numeratora wywołując CComEnumImpl::Init.

  • Zwraca interfejs modułu wyliczającego do klienta.

Hierarchii dziedziczenia

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Wymagania

Nagłówek: atlcom.h

Przykład

Kod pokazany poniżej zawiera wielokrotnego użycia funkcji tworzenia i Inicjowanie obiekt 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

Ta funkcja szablonu można zaimplementować _NewEnum właściwości interfejsu zbierania, 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.

Kod ten tworzy typedef do CComEnum miejscami wektor WARIANTUs poprzez IEnumVariant interfejsu.CVariantArrayCollection po prostu specjalizuje się klasy CreateEnumerator do pracy z modułu wyliczającego obiekty tego typu i przechodzi niezbędne argumenty.

Zobacz też

Informacje

CComObjectThreadModel

Klasa CComEnumImpl

Klasa CComObjectRootEx

Inne zasoby

Omówienie klasy ATL