Aracılığıyla paylaş


CComEnum sınıfı

Bu sınıf üzerinde bir dizi temel com enumerator nesnesi tanımlar.

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

  • Base
    com numaralayıcı (IEnumXXXX) arabirimi.

  • piid
    Numaralayıcı arabirimin arabirim kimliği için bir işaretçi.

  • T
    Numaralayıcı arabirimi tarafından sergilenen öğe türü.

  • Copy
    Homojen bir kopya ilke sınıfı.

  • ThreadModel
    Sınıf iş parçacığı modeli.Bu parametre, projenizde kullanılan genel nesnenin iş parçacığı modeli için varsayılan olarak ayarlanır.

Notlar

CComEnumbir dizi üzerinde temel alan bir com enumerator nesnesi tanımlar.Bu sınıf paraleldir CComEnumOnSTL stl kabında dayalı bir sýralayýcý uygular.Bu sınıf kullanmak için normal 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:

  • typedefBu sınıfın uzmanlığı.

  • Use typedef uzmanlığı şablon bağımsız değişken olarak CComObject.

  • Örneğini CComObject uzmanlığı.

  • Çağırarak enumerator nesnesi başlatılamıyor CComEnumImpl::Init.

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

Devralma hiyerarşisi

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

Gereksinimler

Başlık: atlcom.h

Örnek

Aşağıda gösterilen kod oluşturma ve bir enumerator nesnesi başlatılırken bir yeniden kullanılabilir 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 şablon işlevi uygulamak için kullanılan _NewEnum aşağıda gösterildiği gibi bir koleksiyon arabirimi özelliği:

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 oluşturur bir typedef için CComEnum bir vektör sergiler VARIANTüzerinden s IEnumVariant arabirimi.CVariantArrayCollection class basitçe uzmanlaşmış CreateEnumerator bu tür ve geçişleri gerekli bağımsız değişken numaralayıcı nesneleriyle çalışmak için.

Ayrıca bkz.

Başvuru

CComObjectThreadModel

CComEnumImpl sınıfı

CComObjectRootEx sınıfı

Diğer Kaynaklar

atl sınıfına genel bakış