Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Deze klasse definieert een COM-enumerator-object op basis van een matrix.
Syntaxis
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>
Parameterwaarden
Base
Een COM-enumerator-interface. Zie IEnumString voor een voorbeeld.
piid
Een aanwijzer naar de interface-id van de enumerator-interface.
T
Het type item dat wordt weergegeven door de enumerator-interface.
Copy
Een homogene kopieerbeleidsklasse.
ThreadModel
Het threadingmodel van de klasse. Deze parameter is standaard ingesteld op het globale objectthreadmodel dat in uw project wordt gebruikt.
Opmerkingen
CComEnum definieert een COM-enumerator-object op basis van een matrix. Deze klasse is vergelijkbaar met CComEnumOnSTL waarmee een enumerator wordt geïmplementeerd op basis van een C++ Standard Library-container. Typische stappen voor het gebruik van deze klasse worden hieronder beschreven. Zie ATL Collections en Enumerators voor meer informatie.
Ga als volgt te werk om deze klasse te gebruiken:
typedefeen specialisatie van deze klasse.Gebruik het
typedefargument als sjabloon in een specialisatie vanCComObject.Maak een exemplaar van de
CComObjectspecialisatie.Initialiseer het enumerator-object door CComEnumImpl::Init aan te roepen.
Retourneer de enumerator-interface naar de client.
Overnamehiërarchie
CComObjectRootBase
Base
CComEnum
Requirements
Koptekst: atlcom.h
Example
De onderstaande code biedt een herbruikbare functie voor het maken en initialiseren van een enumerator-object.
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
Deze functiesjabloon kan worden gebruikt om de _NewEnum eigenschap van een verzamelingsinterface te implementeren, zoals hieronder wordt weergegeven:
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.
Met deze code maakt u een typedef for CComEnum waarmee een vector van VARIANT's beschikbaar wordt gemaakt via de IEnumVariant interface. De CVariantArrayCollection klasse is gewoon gespecialiseerd CreateEnumerator in het werken met enumerator-objecten van dit type en geeft de benodigde argumenten door.
Zie ook
Overzicht van klassen
CComObjectThreadModel
CComEnumImpl-klasse
CComObjectRootEx-klasse