Classe di CComEnum

Questa classe definisce un oggetto enumeratore COM basato su una matrice.

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 >

Parametri

  • Base
    Un'interfaccia dell'enumeratore COM ().

  • piid
    Un puntatore all'ID dell'interfaccia dell'enumeratore.

  • T
    Il tipo di elemento esposto dall'enumeratore.

  • Copy
    classe criteri di copiaomogeneo.

  • ThreadModel
    Il modello di threading della classe.Impostazioni predefinite di questo parametro al modello di threading globale dell'oggetto utilizzato nel progetto.

Note

CComEnum definisce un oggetto enumeratore COM basato su una matrice.Questa classe è analogo a CComEnumOnSTL che implementa un enumeratore basato su un contenitore STL.I passaggi comuni per l'utilizzo di tale classe sono descritti in.Per ulteriori informazioni, vedere Raccolte e enumeratori ATL.

Per utilizzare questa classe:

  • typedef una specializzazione di questa classe.

  • Utilizzare typedef come argomento di modello in una specializzazione CComObject.

  • Creare un'istanza della specializzazione CComObject.

  • Inizializzare l'oggetto enumeratore chiamando CComEnumImpl::Init.

  • Restituisce l'interfaccia dell'enumeratore al client.

Gerarchia di ereditarietà

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Requisiti

Header: atlcom.h

Esempio

Il codice riportato di seguito fornisce una funzione riutilizzabile per creare e inizializzare un oggetto 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

Questa funzione modello può essere utilizzata per implementare la proprietà _NewEnum di un'interfaccia di raccolta come illustrato di seguito:

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.

Questo codice crea typedef per CComEnum che espone un vettore VARIANToggetti tramite l'interfaccia IEnumVariant.La classe CVariantArrayCollection specializza semplicemente CreateEnumerator per l'utilizzo degli oggetti enumeratori di questo tipo e passa gli argomenti necessari.

Vedere anche

Riferimenti

CComObjectThreadModel

Classe di CComEnumImpl

Classe di CComObjectRootEx

Altre risorse

I cenni preliminari sulle classi ATL