Delen via


CComEnumImpl-klasse

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze klasse biedt de implementatie voor een COM-enumerator-interface waarin de items die worden geïnventariseerd, worden opgeslagen in een matrix.

Syntaxis

template <class Base,
    const IID* piid, class T, class Copy>
class ATL_NO_VTABLE CComEnumImpl : public Base

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.

Leden

Openbare constructors

Naam Description
CComEnumImpl::CComEnumImpl De constructor.
CComEnumImpl::~CComEnumImpl De destructor.

Openbare methoden

Naam Description
CComEnumImpl::Clone De implementatie van de methode Clone-opsommingsinterface.
CComEnumimpl::Init Initialiseert de enumerator.
CComEnumImpl::Next De implementatie van Next.
CComEnumImpl::Reset De implementatie van Reset.
CComEnumImpl::Skip De implementatie van Skip.

Publieke dataleden

Naam Description
CComEnumImpl::m_begin Een aanwijzer naar het eerste item in de matrix.
CComEnumImpl::m_dwFlags Kopieervlagmen die zijn Initdoorgegeven.
CComEnumImpl::m_end Een aanwijzer naar de locatie net buiten het laatste item in de matrix.
CComEnumImpl::m_iter Een aanwijzer naar het huidige item in de matrix.
CComEnumImpl::m_spUnk De IUnknown aanwijzer van het object dat de verzameling opgeeft die wordt geïnventariseerd.

Opmerkingen

Zie IEnumString voor een voorbeeld van methode-implementaties. CComEnumImpl biedt de implementatie voor een COM-enumerator-interface waarin de items die worden geïnventariseerd, worden opgeslagen in een matrix. Deze klasse is vergelijkbaar met de IEnumOnSTLImpl klasse, die een implementatie van een enumerator-interface biedt op basis van een C++ Standard Library-container.

Opmerking

Zie CComEnumImpl::Init voor meer informatie over verdere verschillen tussen CComEnumImpl enIEnumOnSTLImpl.

Normaal gesproken hoeft u geen eigen enumerator-klasse te maken door deze interface-implementatie te maken. Als u een door ATL geleverde enumerator wilt gebruiken op basis van een matrix, is het gebruikelijker om een exemplaar van CComEnum te maken.

Als u echter een aangepaste enumerator moet opgeven (bijvoorbeeld een die interfaces beschikbaar maakt naast de enumerator-interface), kunt u deze klasse afleiden. In deze situatie is het waarschijnlijk dat u de CComEnumImpl::Clone-methode moet overschrijven om uw eigen implementatie te bieden.

Zie ATL Collections en Enumerators voor meer informatie.

Overnamehiërarchie

Base

CComEnumImpl

Requirements

Koptekst: atlcom.h

CComEnumImpl::CComEnumImpl

De constructor.

CComEnumImpl();

CComEnumImpl::~CComEnumImpl

De destructor.

~CComEnumImpl();

CComEnumimpl::Init

U moet deze methode aanroepen voordat u een aanwijzer doorgeeft aan de enumerator-interface naar alle clients.

HRESULT Init(
    T* begin,
    T* end,
    IUnknown* pUnk,
    CComEnumFlags flags = AtlFlagNoCopy);

Parameterwaarden

beginnen
Een aanwijzer naar het eerste element van de matrix met de items die moeten worden geïnventariseerd.

einde
Een aanwijzer naar de locatie net buiten het laatste element van de matrix met de items die moeten worden geïnventariseerd.

Punk
[in] De IUnknown aanwijzer van een object dat tijdens de levensduur van de enumerator in leven moet worden gehouden. Geef NULL door als er geen dergelijk object bestaat.

flags
Vlaggen die aangeven of de enumerator eigenaar moet worden van de matrix of er een kopie van moeten maken. Mogelijke waarden worden hieronder beschreven.

Retourwaarde

Een standaard HRESULT-waarde.

Opmerkingen

Roep deze methode slechts eenmaal aan: initialiseer de enumerator, gebruik deze en gooi deze weg.

Als u aanwijzers doorgeeft aan items in een matrix die in een ander object is opgeslagen (en u niet de enumerator vraagt om de gegevens te kopiëren), kunt u de parameter pUnk gebruiken om ervoor te zorgen dat het object en de matrix die het bevat, beschikbaar zijn zolang de opsommingsator deze nodig heeft. De enumerator bevat gewoon een COM-verwijzing op het object om het in leven te houden. De COM-verwijzing wordt automatisch vrijgegeven wanneer de enumerator wordt vernietigd.

Met de parameter vlaggen kunt u opgeven hoe de enumerator de matrixelementen moet behandelen die eraan worden doorgegeven. vlaggen kunnen een van de waarden uit de CComEnumFlags opsomming nemen die hieronder wordt weergegeven:

enum CComEnumFlags
   {
   AtlFlagNoCopy = 0,
   AtlFlagTakeOwnership = 2, // BitOwn
   AtlFlagCopy = 3           // BitOwn | BitCopy
   };

AtlFlagNoCopy betekent dat de levensduur van de matrix niet wordt bepaald door de enumerator. In dit geval is de matrix statisch of het object dat wordt geïdentificeerd door pUnk , is verantwoordelijk voor het vrijmaken van de matrix wanneer deze niet meer nodig is.

AtlFlagTakeOwnership betekent dat de vernietiging van de matrix moet worden beheerd door de enumerator. In dit geval moet de matrix dynamisch zijn toegewezen met behulp van new. De enumerator verwijdert de matrix in de destructor. Normaal gesproken geeft u NULL door voor pUnk, hoewel u nog steeds een geldige aanwijzer kunt doorgeven als u om een of andere reden op de hoogte moet worden gesteld van de vernietiging van de enumerator.

AtlFlagCopy betekent dat er een nieuwe matrix moet worden gemaakt door de doorgegeven matrix te Initkopiëren. De levensduur van de nieuwe matrix wordt bepaald door de enumerator. De enumerator verwijdert de matrix in de destructor. Normaal gesproken geeft u NULL door voor pUnk, hoewel u nog steeds een geldige aanwijzer kunt doorgeven als u om een of andere reden op de hoogte moet worden gesteld van de vernietiging van de enumerator.

Opmerking

Het prototype van deze methode specificeert de matrixelementen van het type T, waarbij T is gedefinieerd als een sjabloonparameter voor de klasse. Dit is hetzelfde type dat beschikbaar wordt gesteld met behulp van de COM-interfacemethode CComEnumImpl::Next. De implicatie hiervan is dat, in tegenstelling tot IEnumOnSTLImpl, deze klasse geen ondersteuning biedt voor verschillende opslag- en weergegeven gegevenstypen. Het gegevenstype van elementen in de matrix moet hetzelfde zijn als het gegevenstype dat wordt weergegeven via de COM-interface.

CComEnumImpl::Clone

Deze methode biedt de implementatie van de kloonmethode door een object van het type CComEnumte maken, het te initialiseren met dezelfde matrix en iterator die door het huidige object wordt gebruikt en de interface op het zojuist gemaakte object te retourneren.

STDMETHOD(Clone)(Base** ppEnum);

Parameterwaarden

ppEnum
[uit] De enumerator-interface op een nieuw gemaakt object dat is gekloond vanuit de huidige enumerator.

Retourwaarde

Een standaard HRESULT-waarde.

Opmerkingen

Gekloonde enumerators maken nooit hun eigen kopie (of eigenaar worden) van de gegevens die door de oorspronkelijke enumerator worden gebruikt. Indien nodig blijven gekloonde enumerators de oorspronkelijke enumerator actief (met behulp van een COM-verwijzing) om ervoor te zorgen dat de gegevens beschikbaar zijn zolang ze deze nodig hebben.

CComEnumImpl::m_spUnk

Deze slimme aanwijzer onderhoudt een verwijzing op het object dat wordt doorgegeven aan CComEnumImpl::Init, zodat deze gedurende de levensduur van de opsommingsfunctie actief blijft.

CComPtr<IUnknown> m_spUnk;

CComEnumImpl::m_begin

Een aanwijzer naar de locatie net buiten het laatste element van de matrix met de items die moeten worden geïnventariseerd.

T* m_begin;

CComEnumImpl::m_end

Een aanwijzer naar het eerste element van de matrix met de items die moeten worden geïnventariseerd.

T* m_end;

CComEnumImpl::m_iter

Een aanwijzer naar het huidige element van de matrix met de items die moeten worden opgesomd.

T* m_iter;

CComEnumImpl::m_dwFlags

De vlaggen zijn doorgegeven aan CComEnumImpl::Init.

DWORD m_dwFlags;

CComEnumImpl::Next

Deze methode biedt de implementatie van de methode Next .

STDMETHOD(Next)(ULONG celt, T* rgelt, ULONG* pceltFetched);

Parameterwaarden

Celt
[in] Het aantal gevraagde elementen.

rgelt
[uit] De matrix die moet worden gevuld met de elementen.

pceltFetched
[uit] Het aantal elementen dat daadwerkelijk is geretourneerd in rgelt. Dit kan minder zijn dan celt als er minder dan celtelementen in de lijst blijven staan.

Retourwaarde

Een standaard HRESULT-waarde.

CComEnumImpl::Reset

Deze methode biedt de implementatie van de methode Reset .

STDMETHOD(Reset)(void);

Retourwaarde

Een standaard HRESULT-waarde.

CComEnumImpl::Skip

Deze methode biedt de implementatie van de skip-methode .

STDMETHOD(Skip)(ULONG celt);

Parameterwaarden

Celt
[in] Het aantal elementen dat moet worden overgeslagen.

Retourwaarde

Een standaard HRESULT-waarde.

Opmerkingen

Retourneert E_INVALIDARG als celt nul is, retourneert S_FALSE als er minder dan celtelementen worden geretourneerd, S_OK anders.

Zie ook

Klasse IEnumOnSTLImpl
CComEnum-klasse
Overzicht van klassen