CComEnum Class
Diese Klasse definiert ein COM-Enumeratorobjekt auf einem Array.
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
Base
Eine COM-Enumerator (IEnumXXXX)-Schnittstelle.piid
Ein Zeiger auf den Schnittstellen-ID der Enumeratorschnittstelle.T
Der Typ des Elements verfügbar gemacht die Enumeratorschnittstelle.Copy
Homogenes Kopierrichtlinienklasse.ThreadModel
Das Threadingmodell der Klasse. Dieser Parameter wird standardmäßig der globalen Objektthreadmodell, das im Projekt verwendet wird.
Hinweise
CComEnum definiert ein COM-Enumeratorobjekt auf einem Array. Diese Klasse ist CComEnumOnSTL analog, die einen Enumerator auf Grundlage eines STL-Container implementiert. Typische Schritte für die Verwendung dieser Klasse werden unten erläutert. Weitere Informationen finden Sie unter ATL-Auflistungen und -Enumeratoren.
Um diese Klasse verwenden:
typedef eine Spezialisierung dieser Klasse.
Verwenden Sie typedef als Vorlagenargument in einer Spezialisierung von CComObject.
Erstellen Sie eine Instanz der CComObject Spezialisierung.
Initialisieren Sie das Enumeratorobjekt, indem Sie CComEnumImpl::Init aufrufen.
Geben Sie die Enumeratorschnittstelle an den Client zurück.
Vererbungshierarchie
CComObjectRootBase
Base
CComEnum
Anforderungen
Header: möchten
Beispiel
Der Code, der unten angezeigt wird, 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 Vorlagenfunktion kann verwendet werden, um die _NewEnum-Eigenschaft einer Auflistungsschnittstelle wie unten gezeigt zu implementieren:
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.
Dieser Code erstellt typedef für CComEnum, der einen Vektor von VARIANT s durch die IEnumVariant-Schnittstelle verfügbar macht. Die Klasse CVariantArrayCollection spezialisiert einfach CreateEnumerator, um mit Enumeratorobjekten dieses Typs zu arbeiten und führt die notwendigen Argumente an.