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 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.