Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Diese Klasse definiert ein COM-Enumerationsobjekt basierend auf einer C++-Standardbibliotheksauflistung.
Syntax
template <class Base,
const IID* piid, class T, class Copy, class CollType, class ThreadModel = CComObjectThreadModel>
class ATL_NO_VTABLE CComEnumOnSTL : public IEnumOnSTLImpl<Base, piid,
T,
Copy,
CollType>,
public CComObjectRootEx<ThreadModel>
Parameter
Bemessungsgrundlage
Ein COM-Enumerator. 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 Kopierrichtlinienklasse .
CollType
Eine C++-Standardbibliothek-Containerklasse.
Hinweise
CComEnumOnSTL definiert ein COM-Enumerationsobjekt basierend auf einer C++-Standardbibliotheksauflistung. Diese Klasse kann eigenständig oder in Verbindung mit ICollectionOnSTLImpl verwendet werden. 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 mit ICollectionOnSTLImpl:
typedefeine Spezialisierung dieser Klasse.Verwenden Sie das
typedefletzte Vorlagenargument in einer Spezialisierung vonICollectionOnSTLImpl.
Ein Beispiel finden Sie unter ATL-Auflistungen und Enumeratoren .
So verwenden Sie diese Klasse unabhängig von ICollectionOnSTLImpl:
typedefeine Spezialisierung dieser Klasse.Verwenden Sie das
typedefAls Vorlagenargument in einer Spezialisierung vonCComObject.Erstellen Sie eine Instanz der
CComObjectSpezialisierung.Initialisieren Sie das Enumerationsobjekt durch Aufrufen von IEnumOnSTLImpl::Init.
Gibt die Enumerationsschnittstelle an den Client zurück.
Vererbungshierarchie
CComObjectRootBase
Base
CComEnumOnSTL
Anforderungen
Kopfzeile: atlcom.h
Beispiel
Der unten gezeigte Code stellt eine generische Funktion zum Behandeln der Erstellung und Initialisierung eines Enumeratorobjekts bereit:
template <class EnumType, class CollType>
HRESULT CreateSTLEnumerator(IUnknown** ppUnk, IUnknown* pUnkForRelease,
CollType& collection)
{
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(pUnkForRelease, collection);
if (SUCCEEDED(hr))
hr = pEnum->QueryInterface(ppUnk);
if (FAILED(hr))
delete pEnum;
return hr;
} // CreateSTLEnumerator
Diese Funktionsvorlage kann verwendet werden, um die _NewEnum Eigenschaft einer Sammlungsschnittstelle zu implementieren, wie unten dargestellt:
typedef CComEnumOnSTL<IEnumVARIANT, &IID_IEnumVARIANT, VARIANT, _Copy<VARIANT>,
std::vector<CComVariant> > VarVarEnum;
class ATL_NO_VTABLE CVariantCollection :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CVariantCollection, &CLSID_VariantCollection>,
public IDispatchImpl<IVariantCollection, &IID_IVariantCollection, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
std::vector<CComVariant> m_vec;
STDMETHOD(get__NewEnum)(IUnknown** ppUnk)
{
return CreateSTLEnumerator<VarVarEnum>(ppUnk, this, m_vec);
}
// Remainder of class declaration omitted.
Dieser Code erstellt eine typedef Für CComEnumOnSTL , die einen Vektor von CComVariants über die IEnumVariant Schnittstelle verfügbar macht. Die CVariantCollection Klasse ist einfach darauf spezialisiert, mit Enumerationsobjekten dieses Typs CreateSTLEnumerator zu arbeiten.
Siehe auch
IEnumOnSTLImpl
ATLCollections-Beispiel: Veranschaulicht ICollectionOnSTLImpl, CComEnumOnSTL und benutzerdefinierte Kopierrichtlinienklassen
Klassenübersicht
CComObjectRootEx-Klasse
CComObjectThreadModel
IEnumOnSTLImpl-Klasse