Freigeben über


CComEnum Class

Diese Klasse definiert ein COM-Enumeratorobjekt auf einem Array.

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 >

Parameter

  • Base
    Eine COM-Enumerator (IEnumXXXX)-Schnittstelle.

  • piid
    Ein Zeiger auf den Schnittstellen-ID der Enumeratorschnittstelle.

  • T
    Der Typ des Elements verfügbar gemacht die Enumeratorschnittstelle.

  • Copy
    Homogenes Kopierrichtlinienklasse.

  • ThreadModel
    Das Threadingmodell der Klasse. Dieser Parameter wird standardmäßig der globalen Objektthreadmodell, das im Projekt verwendet wird.

Hinweise

CComEnum definiert ein COM-Enumeratorobjekt auf einem Array. Diese Klasse ist CComEnumOnSTL analog, die einen Enumerator auf Grundlage eines STL-Container implementiert. Typische Schritte für die Verwendung dieser Klasse werden unten erläutert. Weitere Informationen finden Sie unter ATL-Auflistungen und -Enumeratoren.

Um diese Klasse verwenden:

  • typedef eine Spezialisierung dieser Klasse.

  • Verwenden Sie typedef als Vorlagenargument in einer Spezialisierung von CComObject.

  • Erstellen Sie eine Instanz der CComObject Spezialisierung.

  • Initialisieren Sie das Enumeratorobjekt, indem Sie CComEnumImpl::Init aufrufen.

  • Geben Sie die Enumeratorschnittstelle an den Client zurück.

Vererbungshierarchie

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Anforderungen

Header: möchten

Beispiel

Der Code, der unten angezeigt wird, stellt eine wiederverwendbare Funktion zum Erstellen und Initialisieren eines Enumeratorobjekts bereit.

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

Diese Vorlagenfunktion kann verwendet werden, um die _NewEnum-Eigenschaft einer Auflistungsschnittstelle wie unten gezeigt zu implementieren:

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.

Dieser Code erstellt typedef für CComEnum, der einen Vektor von VARIANT s durch die IEnumVariant-Schnittstelle verfügbar macht. Die Klasse CVariantArrayCollection spezialisiert einfach CreateEnumerator, um mit Enumeratorobjekten dieses Typs zu arbeiten und führt die notwendigen Argumente an.

Siehe auch

Referenz

CComObjectThreadModel

CComEnumImpl Class

CComObjectRootEx Class

Weitere Ressourcen

ATL Class Overview