Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta clase define un objeto COM de enumerador basado en una 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
Una interfaz COM de enumerador ().piid
Un puntero al identificador de la interfaz de la interfaz del enumerador.T
El tipo de elemento expuesto por la interfaz del enumerador.Copy
clase de directiva de copiahomogéneo.ThreadModel
el modelo de subprocesos de la clase.Valor predeterminado de este parámetro al modelo de subproceso del objeto global utilizado en el proyecto.
Comentarios
CComEnum define un objeto COM de enumerador basado en una matriz.Esta clase es análoga a CComEnumOnSTL que implementa un enumerador basado en un contenedor de STL.Los pasos típicos para utilizar esta clase se describen a continuación.Para obtener más información, vea Colecciones y enumeradores ATL.
para utilizar esta clase:
typedef una especialización de esta clase.
Utilice typedef como argumento de plantilla en una especialización de CComObject.
Cree una instancia de especialización de CComObject .
Inicializa el objeto enumerator llamando a CComEnumImpl:: Iniciar.
Devuelve la interfaz del enumerador al cliente.
Jerarquía de herencia
CComObjectRootBase
Base
CComEnum
Requisitos
encabezado: atlcom.h
Ejemplo
El código muestra siguiente proporciona una función reutilizable para crear e inicializar un objeto de 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 función de plantilla se puede utilizar para implementar la propiedad de _NewEnum de una interfaz de intercalació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 typedef para CComEnum que expone un vector de s para VARIANTa través de la interfaz de IEnumVariant .La clase de CVariantArrayCollection especializada simplemente CreateEnumerator para trabajar con objetos de enumeradores de este tipo y pasa los argumentos necesarios.