CComEnum, classe
Cette classe définit un objet d’énumérateur COM basé sur un tableau.
Syntaxe
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>
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.
ThreadModel
Modèle de thread de la classe. Ce paramètre utilise par défaut le modèle de thread d’objet global utilisé dans votre projet.
Notes
CComEnum
définit un objet d’énumérateur COM basé sur un tableau. Cette classe est analogue à CComEnumOnSTL qui implémente un énumérateur basé sur un conteneur de bibliothèque standard C++. Les étapes classiques d’utilisation de cette classe sont décrites ci-dessous. Pour plus d’informations, consultez collections ATL et énumérateurs.
Pour utiliser cette classe :
typedef
spécialisation de cette classe.Utilisez l’argument
typedef
de modèle dans une spécialisation deCComObject
.Créez une instance de la
CComObject
spécialisation.Initialisez l’objet énumérateur en appelant CComEnumImpl ::Init.
Retournez l’interface d’énumérateur au client.
Hiérarchie d'héritage
CComObjectRootBase
Base
CComEnum
Spécifications
En-tête : atlcom.h
Exemple
Le code ci-dessous fournit une fonction réutilisable pour la création et l’initialisation d’un objet d’énumérateur.
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
Ce modèle de fonction peut être utilisé pour implémenter la _NewEnum
propriété d’une interface de collection, comme indiqué ci-dessous :
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.
Ce code crée un typedef
for CComEnum
qui expose un vecteur de VARIANTs via l’interface IEnumVariant
. La CVariantArrayCollection
classe se spécialise CreateEnumerator
simplement pour travailler avec des objets énumérateurs de ce type et transmet les arguments nécessaires.
Voir aussi
Vue d’ensemble de la classe
CComObjectThreadModel
CComEnumImpl, classe
CComObjectRootEx, classe