CComEnum-Klasse
Diese Klasse definiert ein COM-Enumerationsobjekt basierend auf einem Array.
Syntax
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>
Parameter
Bemessungsgrundlage
Eine COM-Enumerationsschnittstelle. Ein Beispiel finden Sie unter "IEnumString ".
piid
Ein Zeiger auf die Schnittstellen-ID der Enumeratorschnittstelle.
T
Der Typ des Elements, der von der Enumerationsschnittstelle verfügbar gemacht wird.
Kopieren
Eine homogene Kopierrichtlinienklasse.
ThreadModel
Das Threadingmodell der Klasse. Dieser Parameter entspricht standardmäßig dem globalen Objektthreadmodell, das in Ihrem Projekt verwendet wird.
Hinweise
CComEnum
definiert ein COM-Enumerationsobjekt basierend auf einem Array. Diese Klasse ist analog zu CComEnumOnSTL , die einen Enumerator basierend auf einem C++-Standardbibliothekscontainer implementiert. Typische Schritte für die Verwendung dieser Klasse sind unten beschrieben. Weitere Informationen finden Sie unter ATL-Auflistungen und Enumerationen.
So verwenden Sie diese Klasse:
typedef
eine Spezialisierung dieser Klasse.Verwenden Sie das
typedef
Als Vorlagenargument in einer Spezialisierung vonCComObject
.Erstellen Sie eine Instanz der
CComObject
Spezialisierung.Initialisieren Sie das Enumerationsobjekt durch Aufrufen von CComEnumImpl::Init.
Gibt die Enumerationsschnittstelle an den Client zurück.
Vererbungshierarchie
CComObjectRootBase
Base
CComEnum
Anforderungen
Kopfzeile: atlcom.h
Beispiel
Der unten gezeigte Code stellt eine wiederverwendbare Funktion zum Erstellen und Initialisieren eines Enumeratorobjekts bereit.
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
Diese Funktionsvorlage kann verwendet werden, um die _NewEnum
Eigenschaft einer Sammlungsschnittstelle zu implementieren, wie unten dargestellt:
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.
Mit diesem Code wird ein typedef
CComEnum
Vektor von VARIANTs über die IEnumVariant
Schnittstelle verfügbar gemacht. Die CVariantArrayCollection
Klasse ist einfach auf die Arbeit mit Enumerationsobjekten dieses Typs CreateEnumerator
spezialisiert und übergibt die erforderlichen Argumente.
Siehe auch
Klassenübersicht
CComObjectThreadModel
CComEnumImpl-Klasse
CComObjectRootEx-Klasse