共用方式為


CComEnum 類別

這個類別會根據數位定義 COM 列舉值物件。

語法

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>

參數

Base
COM 列舉值介面。 如需範例,請參閱 IEnumString

piid
列舉值介面之介面標識碼的指標。

T
列舉值介面所公開的項目類型。

複製
同質 複製原則類別

ThreadModel
類別的線程模型。 此參數預設為專案中所使用的全域物件線程模型。

備註

CComEnum 根據陣列定義 COM 列舉值物件。 這個類別類似於 CComEnumOnSTL ,它會根據標準連結庫容器C++實作列舉值。 使用這個類別的一般步驟如下所述。 如需詳細資訊,請參閱 ATL 集合和列舉值

若要使用此類別:

  • typedef 這個類別的特製化。

  • typedef使用 做為 特製化的CComObject樣板自變數。

  • 建立特製化的實例 CComObject

  • 呼叫 CComEnumImpl::Init,初始化列舉值物件。

  • 將列舉值介面傳回用戶端。

繼承階層架構

CComObjectRootBase

Base

CComObjectRootEx

CComEnumImpl

CComEnum

需求

標頭: atlcom.h

範例

下列程式代碼提供可重複使用的函式,以建立和初始化列舉值物件。

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

此函式範本可用來實 _NewEnum 作集合介面的 屬性,如下所示:

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.

此程式代碼會 typedef 建立 , CComEnum 以透過 IEnumVariant 介面公開 VARIANT 的向量。 類別 CVariantArrayCollection 只會專門 CreateEnumerator 處理此類型的列舉值物件,並傳遞必要的自變數。

另請參閱

類別概觀
CComObjectThreadModel
CComEnumImpl 類別
CComObjectRootEx 類別