Compartilhar via


Classe de CComEnum

Esta classe define um objeto enumerator COM com base em uma matriz.

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 >

Parâmetros

  • Base
    Uma interface de enumerador COM (IEnumXXXX).

  • piid
    Um ponteiro para o interface identificação da interface de enumeração.

  • T
    O tipo de item exposto pela interface de enumeração.

  • Copy
    copie a classe da diretivahomogêneo.

  • ThreadModel
    O modelo de threads da classe.Este parâmetro tem como padrão o modelo de threads do objeto global usado em seu projeto.

Comentários

CComEnum define um objeto enumerator COM com base em uma matriz.Essa classe é análogo a CComEnumOnSTL que implementa um enumerador baseia-se em um recipiente de STL.As etapas típicas para usar essa classe são descritas abaixo.Para obter mais informações, consulte coleções e enumeradores de ATL.

Para usar esta classe:

  • typedef uma especialização de essa classe.

  • Use typedef como o argumento do modelo em uma especialização de CComObject.

  • Crie uma instância de especialização de CComObject .

  • Inicializar o objeto enumerator chamando CComEnumImpl::Init.

  • Retornar a interface do enumerador para o cliente.

Hierarquia de herança

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Requisitos

Cabeçalho: atlcom.h

Exemplo

O código mostrado abaixo fornece uma função reutilizável para criar e inicializar um objeto 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

Essa função de modelo pode ser usada para implementar como mostrado a propriedade de _NewEnum de uma interface de coleção abaixo:

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.

Esse código cria typedef para CComEnum que expõe um vetor de VARIANTs através da interface de IEnumVariant .A classe de CVariantArrayCollection especializa simplesmente CreateEnumerator para trabalhar com objetos de enumerador de esse tipo e passa os argumentos necessários.

Consulte também

Referência

CComObjectThreadModel

Classe de CComEnumImpl

Classe de CComObjectRootEx

Outros recursos

Visão geral da classe de ATL