Partage via


CComEnumImpl, classe

Cette classe fournit l’implémentation d’une interface d’énumérateur COM où les éléments énumérés sont stockés dans un tableau.

Syntaxe

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

Paramètres

Base
Interface d’énumérateur COM. Consultez IEnumString pour obtenir un exemple.

piid
Pointeur vers l’ID d’interface de l’interface d’énumérateur.

T
Type d’élément exposé par l’interface d’énumérateur.

Copy
Classe de stratégie de copie homogène.

Membres

Constructeurs publics

Nom Description
CComEnumImpl ::CComEnumImpl Constructeur .
CComEnumImpl ::~CComEnumImpl Destructeur.

Méthodes publiques

Nom Description
CComEnumImpl ::Clone Implémentation de la méthode d’interface d’énumération Clone .
CComEnumImpl ::Init Initialise l'énumérateur.
CComEnumImpl ::Next Implémentation de Next.
CComEnumImpl ::Reset Implémentation de la réinitialisation.
CComEnumImpl ::Skip Implémentation de Skip.

Membres de données publics

Nom Description
CComEnumImpl ::m_begin Pointeur vers le premier élément du tableau.
CComEnumImpl ::m_dwFlags Copier des indicateurs passés par Init.
CComEnumImpl ::m_end Pointeur vers l’emplacement juste au-delà du dernier élément du tableau.
CComEnumImpl ::m_iter Pointeur vers l’élément actif dans le tableau.
CComEnumImpl ::m_spUnk Pointeur IUnknown de l’objet fournissant la collection énumérée.

Notes

Consultez IEnumString pour obtenir un exemple d’implémentations de méthode. CComEnumImpl fournit l’implémentation d’une interface d’énumérateur COM où les éléments énumérés sont stockés dans un tableau. Cette classe est analogue à la IEnumOnSTLImpl classe, qui fournit une implémentation d’une interface d’énumérateur basée sur un conteneur de bibliothèque standard C++.

Remarque

Pour plus d’informations sur les différences entre CComEnumImpl et , consultez CComEnumImpl ::InitIEnumOnSTLImpl.

En règle générale, vous n’aurez pas besoin de créer votre propre classe d’énumérateur en dérivant de cette implémentation d’interface. Si vous souhaitez utiliser un énumérateur fourni par ATL basé sur un tableau, il est plus courant de créer une instance de CComEnum.

Toutefois, si vous devez fournir un énumérateur personnalisé (par exemple, un qui expose des interfaces en plus de l’interface d’énumérateur), vous pouvez dériver de cette classe. Dans ce cas, il est probable que vous devrez remplacer la méthode CComEnumImpl ::Clone pour fournir votre propre implémentation.

Pour plus d’informations, consultez collections ATL et énumérateurs.

Hiérarchie d'héritage

Base

CComEnumImpl

Spécifications

En-tête : atlcom.h

CComEnumImpl ::CComEnumImpl

Constructeur .

CComEnumImpl();

CComEnumImpl ::~CComEnumImpl

Destructeur.

~CComEnumImpl();

CComEnumImpl ::Init

Vous devez appeler cette méthode avant de transmettre un pointeur à l’interface d’énumérateur à tous les clients.

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

Paramètres

begin
Pointeur vers le premier élément du tableau contenant les éléments à énumérer.

end
Pointeur vers l’emplacement juste au-delà du dernier élément du tableau contenant les éléments à énumérer.

Punk
[in] Pointeur IUnknown d’un objet qui doit être conservé actif pendant la durée de vie de l’énumérateur. Transmettez NULL s’il n’existe aucun objet de ce type.

flags
Indicateurs spécifiant si l’énumérateur doit prendre possession du tableau ou en faire une copie. Les valeurs possibles sont décrites ci-dessous.

Valeur de retour

Valeur HRESULT standard.

Notes

Appelez cette méthode une seule fois : initialisez l’énumérateur, utilisez-le, puis lèvez-le.

Si vous passez des pointeurs vers des éléments d’un tableau conservé dans un autre objet (et que vous ne demandez pas à l’énumérateur de copier les données), vous pouvez utiliser le paramètre pUnk pour vous assurer que l’objet et le tableau qu’il contient sont disponibles tant que l’énumérateur en a besoin. L’énumérateur contient simplement une référence COM sur l’objet pour le conserver actif. La référence COM est automatiquement libérée lorsque l’énumérateur est détruit.

Le paramètre d’indicateurs vous permet de spécifier la façon dont l’énumérateur doit traiter les éléments de tableau passés à celui-ci. Les indicateurs peuvent prendre l’une des valeurs de l’énumération CComEnumFlags indiquée ci-dessous :

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

AtlFlagNoCopy signifie que la durée de vie du tableau n’est pas contrôlée par l’énumérateur. Dans ce cas, le tableau sera statique ou l’objet identifié par pUnk sera chargé de libérer le tableau lorsqu’il n’est plus nécessaire.

AtlFlagTakeOwnership signifie que la destruction du tableau doit être contrôlée par l’énumérateur. Dans ce cas, le tableau doit avoir été alloué dynamiquement à l’aide newde . L’énumérateur supprime le tableau dans son destructeur. En règle générale, vous passez NULL pour pUnk, bien que vous puissiez toujours passer un pointeur valide si vous devez être averti de la destruction de l’énumérateur pour une raison quelconque.

AtlFlagCopy signifie qu’un nouveau tableau doit être créé en copiant le tableau passé à Init. La durée de vie du nouveau tableau doit être contrôlée par l’énumérateur. L’énumérateur supprime le tableau dans son destructeur. En règle générale, vous passez NULL pour pUnk, bien que vous puissiez toujours passer un pointeur valide si vous devez être averti de la destruction de l’énumérateur pour une raison quelconque.

Remarque

Le prototype de cette méthode spécifie les éléments de tableau comme étant de type T, où T a été défini comme paramètre de modèle pour la classe. Il s’agit du même type que celui exposé par le biais de la méthode d’interface COM CComEnumImpl ::Next. L’implication de ceci est que, contrairement à IEnumOnSTLImpl, cette classe ne prend pas en charge différents types de données de stockage et exposés. Le type de données des éléments du tableau doit être identique au type de données exposé par le biais de l’interface COM.

CComEnumImpl ::Clone

Cette méthode fournit l’implémentation de la méthode Clone en créant un objet de type CComEnum, en l’initialisant avec le même tableau et itérateur utilisé par l’objet actuel, et en retournant l’interface sur l’objet nouvellement créé.

STDMETHOD(Clone)(Base** ppEnum);

Paramètres

ppEnum
[out] Interface d’énumérateur sur un objet nouvellement créé cloné à partir de l’énumérateur actuel.

Valeur de retour

Valeur HRESULT standard.

Notes

Notez que les énumérateurs clonés n’effectuent jamais leur propre copie (ou prennent possession) des données utilisées par l’énumérateur d’origine. Si nécessaire, les énumérateurs clonés conservent l’énumérateur d’origine actif (à l’aide d’une référence COM) pour s’assurer que les données sont disponibles tant qu’elles en ont besoin.

CComEnumImpl ::m_spUnk

Ce pointeur intelligent conserve une référence sur l’objet passé à CComEnumImpl ::Init, ce qui garantit qu’il reste actif pendant la durée de vie de l’énumérateur.

CComPtr<IUnknown> m_spUnk;

CComEnumImpl ::m_begin

Pointeur vers l’emplacement juste au-delà du dernier élément du tableau contenant les éléments à énumérer.

T* m_begin;

CComEnumImpl ::m_end

Pointeur vers le premier élément du tableau contenant les éléments à énumérer.

T* m_end;

CComEnumImpl ::m_iter

Pointeur vers l’élément actuel du tableau contenant les éléments à énumérer.

T* m_iter;

CComEnumImpl ::m_dwFlags

Indicateurs passés à CComEnumImpl ::Init.

DWORD m_dwFlags;

CComEnumImpl ::Next

Cette méthode fournit l’implémentation de la méthode Next .

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

Paramètres

Celt
[in] Nombre d’éléments demandés.

rgelt
[out] Tableau à remplir avec les éléments.

pceltFetched
[out] Nombre d’éléments retournés en réalité dans rgelt. Cela peut être inférieur au celte si moins d’éléments celtes restent dans la liste.

Valeur de retour

Valeur HRESULT standard.

CComEnumImpl ::Reset

Cette méthode fournit l’implémentation de la méthode Reset .

STDMETHOD(Reset)(void);

Valeur de retour

Valeur HRESULT standard.

CComEnumImpl ::Skip

Cette méthode fournit l’implémentation de la méthode Skip .

STDMETHOD(Skip)(ULONG celt);

Paramètres

Celt
[in] Nombre d’éléments à ignorer.

Valeur de retour

Valeur HRESULT standard.

Notes

Retourne E_INVALIDARG si le celte est égal à zéro, retourne S_FALSE si moins d’éléments celtes sont retournés, retourne S_OK sinon.

Voir aussi

IEnumOnSTLImpl, classe
CComEnum, classe
Vue d’ensemble de la classe