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-Enumeratorobjekt auf Grundlage einer STL-Auflistung.
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
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
Eine Kopierrichtlinienklassen-Klasse.CollType
Eine STL-Containerklasse.
Hinweise
CComEnumOnSTL definiert ein COM-Enumeratorobjekt auf Grundlage einer STL-Auflistung.Diese Klasse kann allein oder in Verbindung mit ICollectionOnSTLImpl verwendet werden.Typische Schritte für die Verwendung dieser Klasse werden unten erläutert.Weitere Informationen finden Sie unter ATL-Auflistungen und -Enumeratoren.
Um diese Klasse mit ICollectionOnSTLImpl verwenden:
typedef eine Spezialisierung dieser Klasse.
Verwenden Sie typedef als das endgültige Vorlagenargument in einer Spezialisierung von ICollectionOnSTLImpl.
Siehe ATL-Auflistungen und -Enumeratoren als ein Beispiel.
Um diese Klasse unabhängig ICollectionOnSTLImpl 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 IEnumOnSTLImpl::Init aufrufen.
Geben Sie die Enumeratorschnittstelle an den Client zurück.
Vererbungshierarchie
CComObjectRootBase
Base
CComEnumOnSTL
Anforderungen
Header: möchten
Beispiel
Der Code, der unten angezeigt wird, stellt eine generische Funktion, um die Erstellung und die Initialisierung eines Enumeratorobjekts bearbeiten:
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 Vorlagenfunktion kann verwendet werden, um die _NewEnum-Eigenschaft einer Auflistungsschnittstelle wie unten gezeigt zu implementieren:
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 typedef für CComEnumOnSTL, der einen Vektor von CComVariant s mithilfe der IEnumVariant-Schnittstelle verfügbar macht.Die Klasse CVariantCollection spezialisiert einfach CreateSTLEnumerator, um mit Enumeratorobjekten dieses Typs zu arbeiten.