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 new
de . 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
Celte
[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
Celte
[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 celt sont retournés, retourne S_OK sinon.
Voir aussi
IEnumOnSTLImpl, classe
CComEnum, classe
Vue d’ensemble de la classe