Classe CComEnum
Questa classe definisce un oggetto enumeratore COM basato su una matrice.
Sintassi
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>
Parametri
Base
Interfaccia dell'enumeratore COM. Per un esempio, vedere IEnumString .
piid
Puntatore all'ID interfaccia dell'interfaccia dell'enumeratore.
T
Tipo di elemento esposto dall'interfaccia dell'enumeratore.
Copia
Classe di criteri di copia omogenea.
ThreadModel
Modello di threading della classe . Per impostazione predefinita, questo parametro corrisponde al modello di thread a oggetti globale usato nel progetto.
Osservazioni:
CComEnum
definisce un oggetto enumeratore COM basato su una matrice. Questa classe è analoga a CComEnumOnSTL che implementa un enumeratore basato su un contenitore della libreria standard C++. Di seguito sono descritti i passaggi tipici per l'uso di questa classe. Per altre informazioni, vedere Raccolte e enumeratori ATL.
Per usare questa classe:
typedef
una specializzazione di questa classe.typedef
Usare come argomento modello in una specializzazione diCComObject
.Creare un'istanza della
CComObject
specializzazione.Inizializzare l'oggetto enumeratore chiamando CComEnumImpl::Init.
Restituire l'interfaccia dell'enumeratore al client.
Gerarchia di ereditarietà
CComObjectRootBase
Base
CComEnum
Requisiti
Intestazione: atlcom.h
Esempio
Il codice illustrato di seguito fornisce una funzione riutilizzabile per la creazione e l'inizializzazione di un oggetto enumeratore.
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
Questo modello di funzione può essere usato per implementare la proprietà di un'interfaccia _NewEnum
di raccolta, come illustrato di seguito:
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.
Questo codice crea un typedef
oggetto per CComEnum
che espone un vettore di VARIANT tramite l'interfaccia IEnumVariant
. La CVariantArrayCollection
classe è semplicemente specializzata CreateEnumerator
per lavorare con gli oggetti enumeratore di questo tipo e passa gli argomenti necessari.
Vedi anche
Cenni preliminari sulla classe
CComObjectThreadModel
Classe CComEnumImpl
Classe CComObjectRootEx