Partilhar via


Classe CComEnum

Essa classe define um objeto de enumerador COM baseado 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
    Um enumerador de COM (IEnumXXXX) interface.

  • piid
    Um ponteiro para a ID da interface do enumerador.

  • T
    O tipo de item exposto pela interface do enumerador.

  • Copy
    Um homogêneos classe de diretiva de cópia.

  • ThreadModel
    O modelo de segmentação da classe.Este parâmetro padrão é o modelo de thread do objeto global usado no seu projeto.

Comentários

CComEnum define um objeto de enumerador COM base em uma matriz. Essa classe é semelhante a CComEnumOnSTL que implementa um enumerador com base em um contêiner STL.Etapas típicas para usar essa classe são descritas a seguir.Para obter mais informações, consulte ATL coleções e enumeradores.

Para usar essa classe:

  • typedef uma especialização dessa classe.

  • Use o typedef sistema autônomo argumento em uma especialização de modelo CComObject.

  • Criar uma instância do CComObject especialização.

  • Inicializar o objeto enumerador chamando CComEnumImpl::Init.

  • Retorne a interface do enumerador para o cliente.

Requisitos

Cabeçalho: atlcom.h

Exemplo

O código mostrado a seguir fornece uma função reutilizável para criar e inicializar um objeto enumerador.

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

Esta função do modelo pode ser usada para implementar o _NewEnum propriedade de uma interface de coleção sistema autônomo mostrado 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 um typedef para CComEnum que expõe um vetor de VARIANTEs até o IEnumVariant interface.The CVariantArrayCollection classe simplesmente especializada CreateEnumerator para trabalhar com objetos do enumerador desse tipo e passa os argumentos necessários.

Consulte também

Referência

CComObjectThreadModel

Classe CComEnumImpl

Classe CComObjectRootEx

Outros recursos

CComEnum membros

Visão geral do ATL classe