Sdílet prostřednictvím


CComEnum – třída

Tato třída definuje objekt enumerátoru MODELU COM na základě pole.

Syntaxe

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

Základna
Rozhraní enumerátoru COM. Příklad najdete v souboru IEnumString .

piid
Ukazatel na ID rozhraní enumerátoru.

T
Typ položky vystavené rozhraním enumerátoru.

Kopírování
Homogenní třída zásad kopírování.

ThreadModel
Model threading třídy. Tento parametr ve výchozím nastavení použije globální model vlákna objektu použitý v projektu.

Poznámky

CComEnum definuje objekt enumerátoru MODELU COM na základě pole. Tato třída je podobná CComEnumOnSTL , která implementuje enumerátor založený na kontejneru standardní knihovny C++. Typické kroky pro použití této třídy jsou popsány níže. Další informace naleznete v tématu ATL Collections and Enumerators.

Chcete-li použít tuto třídu:

  • typedef specializace této třídy.

  • typedef Použijte jako argument šablony v specializaci .CComObject

  • Vytvořte instanci CComObject specializace.

  • Inicializace enumerator objektu volání CComEnumImpl::Init.

  • Vraťte rozhraní enumerátoru klientovi.

Hierarchie dědičnosti

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Požadavky

Hlavička: atlcom.h

Příklad

Níže uvedený kód poskytuje opakovaně použitelnou funkci pro vytvoření a inicializaci objektu enumerátoru.

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

Tuto šablonu funkce lze použít k implementaci _NewEnum vlastnosti rozhraní kolekce, jak je znázorně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 vektor CComEnum VARIANTs prostřednictvím IEnumVariant rozhraní. Třída CVariantArrayCollection se jednoduše specializuje CreateEnumerator na práci s objekty enumerátoru tohoto typu a předává nezbytné argumenty.

Viz také

Přehled třídy
CComObjectThreadModel
CComEnumImpl – třída
CComObjectRootEx – třída