CComEnum (clase)
Esta clase define un objeto enumerador COM basado en una matriz.
Sintaxis
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
Una interfaz de enumerador COM. Consulte IEnumString para ver un ejemplo.
piid
Puntero al Id. de interfaz de la interfaz del enumerador.
T
El tipo de elemento expuesto por la interfaz del enumerador.
Copiar
Una clase de directiva de copia homogénea.
ThreadModel
Modelo de subprocesos de la clase. Este parámetro tiene como valor predeterminado el modelo de subprocesos de objetos global que se usa en el proyecto.
Comentarios
CComEnum
define un objeto enumerador COM basado en una matriz. Esta clase es análoga a CComEnumOnSTL, que implementa un enumerador basado en un contenedor de biblioteca estándar de C++. Ahora se describen los pasos típicos para usar esta clase. Para más información, consulte Colecciones y enumeradores de ATL.
Para usar esta clase:
typedef
una especialización de esta clase.Use
typedef
como argumento de plantilla en una especialización deCComObject
.Cree una instancia de la especialización
CComObject
.Inicialice el objeto enumerador llamando a CComEnumImpl::Init.
Devuelve la interfaz del enumerador al cliente.
Jerarquía de herencia
CComObjectRootBase
Base
CComEnum
Requisitos
Encabezado: atlcom.h
Ejemplo
El código que se muestra a continuación proporciona una función reutilizable para crear e inicializar un 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 plantilla de función se puede usar para implementar la _NewEnum
propiedad de una interfaz de colección, como se muestra a continuación:
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 crea un typedef
para CComEnum
que expone un vector de VARIANT a través de la interfaz IEnumVariant
. La clase CVariantArrayCollection
simplemente se especializa CreateEnumerator
para trabajar con objetos enumeradores de este tipo y pasa los argumentos necesarios.
Consulte también
Información general sobre la clase
CComObjectThreadModel
CComEnumImpl (clase)
CComObjectRootEx (clase)