Aracılığıyla paylaş


CComEnum Sınıfı

Bu sınıf, diziyi temel alan bir COM numaralandırıcı nesnesi tanımlar.

Sözdizimi

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>

Parametreler

Taban
COM numaralandırıcı arabirimi. Bir örnek için bkz . IEnumString .

piid
Numaralandırıcı arabiriminin arabirim kimliğinin işaretçisi.

T
Numaralandırıcı arabirimi tarafından kullanıma sunulan öğe türü.

Kopyala
Homojen bir kopyalama ilkesi sınıfı.

ThreadModel
Sınıfının iş parçacığı oluşturma modeli. Bu parametre varsayılan olarak projenizde kullanılan genel nesne iş parçacığı modelini kullanır.

Açıklamalar

CComEnum bir diziyi temel alan bir COM numaralandırıcı nesnesi tanımlar. Bu sınıf, C++ Standart Kitaplığı kapsayıcısını temel alan bir numaralandırıcı uygulayan CComEnumOnSTL ile benzerdir. Bu sınıfı kullanmaya yönelik tipik adımlar aşağıda özetlenmiştir. Daha fazla bilgi için bkz . ATL Koleksiyonları ve Numaralandırıcıları.

Bu sınıfı kullanmak için:

  • typedef bu sınıfın bir uzmanlığı.

  • typedef uzmanlık alanında CComObjectşablon bağımsız değişkeni olarak kullanın.

  • Özelleştirmenin bir örneğini CComObject oluşturun.

  • CComEnumImpl::Init çağrısı yaparak numaralandırıcı nesnesini başlatın.

  • Numaralandırıcı arabirimini istemciye döndür.

Devralma Hiyerarşisi

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Gereksinimler

Üst bilgi: atlcom.h

Örnek

Aşağıda gösterilen kod, numaralandırıcı nesnesi oluşturmak ve başlatmak için yeniden kullanılabilir bir işlev sağlar.

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

Bu işlev şablonu, aşağıda gösterildiği gibi bir koleksiyon arabiriminin özelliğini uygulamak _NewEnum için kullanılabilir:

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.

Bu kod, arabirimi aracılığıyla IEnumVariant VARIANT'ların vektörünü kullanıma sunan bir için CComEnum oluştururtypedef. sınıfı CVariantArrayCollection yalnızca bu türdeki numaralandırıcı nesneleriyle çalışmak için uzmanlaşmıştır CreateEnumerator ve gerekli bağımsız değişkenleri geçirir.

Ayrıca bkz.

Sınıfa Genel Bakış
CComObjectThreadModel
CComEnumImpl Sınıfı
CComObjectRootEx Sınıfı