Partager via


CComEnum, classe

Cette classe définit un objet d’énumérateur COM basé sur un tableau.

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>

Paramètres

Base
Interface d’énumérateur COM. Consultez IEnumString pour obtenir un exemple.

piid
Pointeur vers l’ID d’interface de l’interface d’énumérateur.

T
Type d’élément exposé par l’interface d’énumérateur.

Copy
Classe de stratégie de copie homogène.

ThreadModel
Modèle de thread de la classe. Ce paramètre utilise par défaut le modèle de thread d’objet global utilisé dans votre projet.

Notes

CComEnum définit un objet d’énumérateur COM basé sur un tableau. Cette classe est analogue à CComEnumOnSTL qui implémente un énumérateur basé sur un conteneur de bibliothèque standard C++. Les étapes classiques d’utilisation de cette classe sont décrites ci-dessous. Pour plus d’informations, consultez collections ATL et énumérateurs.

Pour utiliser cette classe :

  • typedef spécialisation de cette classe.

  • Utilisez l’argument typedef de modèle dans une spécialisation de CComObject.

  • Créez une instance de la CComObject spécialisation.

  • Initialisez l’objet énumérateur en appelant CComEnumImpl ::Init.

  • Retournez l’interface d’énumérateur au client.

Hiérarchie d'héritage

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Spécifications

En-tête : atlcom.h

Exemple

Le code ci-dessous fournit une fonction réutilisable pour la création et l’initialisation d’un objet d’énumérateur.

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

Ce modèle de fonction peut être utilisé pour implémenter la _NewEnum propriété d’une interface de collection, comme indiqué ci-dessous :

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.

Ce code crée un typedef for CComEnum qui expose un vecteur de VARIANTs via l’interface IEnumVariant . La CVariantArrayCollection classe se spécialise CreateEnumerator simplement pour travailler avec des objets énumérateurs de ce type et transmet les arguments nécessaires.

Voir aussi

Vue d’ensemble de la classe
CComObjectThreadModel
CComEnumImpl, classe
CComObjectRootEx, classe