Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Esta classe define um objeto enumerador COM baseado num array.
Sintaxe
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. Veja IEnumString para um exemplo.
Piid
Um apontador para o ID da interface do enumerador.
T
O tipo de item exposto pela interface do enumerador.
Copy
Uma classe de política de cópia homogénea.
ThreadModel
O modelo de rosca da classe. Este parâmetro corresponde por defeito ao modelo global de object thread usado no seu projeto.
Observações
CComEnum define um objeto enumerador COM baseado num array. Esta classe é análoga ao CComEnumOnSTL , que implementa um enumerador baseado num contentor de Biblioteca Padrão C++. Os passos típicos para utilizar esta aula são descritos abaixo. Para mais informações, consulte Coleções e Enumeradores ATL.
Para usar esta classe:
typedefuma especialização desta disciplina.Use o
typedefcomo argumento modelo numa especialização deCComObject.Cria uma instância da
CComObjectespecialização.Inicialize o objeto enumerador chamando CComEnumImpl::Init.
Devolva a interface do enumerador ao cliente.
Hierarquia de herança
CComObjectRootBase
Base
CComEnum
Requerimentos
Cabeçalho: atlcom.h
Example
O código mostrado abaixo 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
Este modelo de função pode ser usado para implementar a _NewEnum propriedade de uma interface de coleção, como 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.
Este código cria um typedef for CComEnum que expõe um vetor de VARIANTs através da IEnumVariant interface. A CVariantArrayCollection classe simplesmente se especializa CreateEnumerator em trabalhar com objetos enumeradores deste tipo e passa os argumentos necessários.
Consulte também
Visão geral da classe
CComObjectThreadModel
Classe CComEnumImpl
Classe CComObjectRootEx