Sdílet prostřednictvím


Třída CComEnum

Tato třída definuje objekt enumerator COM založené na pole.

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
    Čítač výčtu COM (IEnumXXXX) rozhraní.

  • piid
    Ukazatel na ID rozhraní čítač rozhraní.

  • T
    Typ položky prezentována čítač rozhraní.

  • Copy
    Homogenní třídy kopie zásady.

  • ThreadModel
    Model podprocesů třídy.Tento parametr výchozí globální objektový model podprocesu použit v projektu.

Poznámky

CComEnumdefinuje objekt enumerator COM založené na matici.Tato třída je analogická CComEnumOnSTL provádí čítač výčtu založené na kontejneru STL.Typické kroky pro používání této třídy jsou uvedeny níže.Další informace naleznete v tématu kolekce ATL a čítače výčtu.

Pomocí této třídy:

  • typedefspecializace této třídy.

  • Použití typedef jako argument šablony v specializace z CComObject .

  • Vytvořit instanci CComObject specializace.

  • Inicializovat objekt enumerator voláním CComEnumImpl::Init.

  • Čítač rozhraní vrátíte klientovi.

Hierarchii dědičnosti

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Požadavky

Záhlaví: atlcom.h

Příklad

Kód níže obsahuje opakovaně použitelné funkce pro vytvoření a inicializace objektu 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

Tato funkce šablony lze použít k implementaci _NewEnum vlastnosti rozhraní sběru, jak je ukázáno níže:

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.

Tento kód vytvoří typedef pro CComEnum poskytuje vektor VARIANTYs až IEnumVariant rozhraní.CVariantArrayCollection třídy jednoduše specializuje CreateEnumerator práce s objekty čítače výčtu tohoto typu a průchody potřebné argumenty.

Viz také

Referenční dokumentace

CComObjectThreadModel

Třída CComEnumImpl

Třída CComObjectRootEx

Další zdroje

Přehled třídy ATL