다음을 통해 공유


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 열거자 (IEnumXXXX) 인터페이스.

  • piid
    열거자 인터페이스의 인터페이스 ID에 대 한 포인터입니다.

  • T
    열거자 인터페이스에 의해 노출 되는 항목의 형식입니다.

  • Copy
    동종의 복사 정책 클래스.

  • ThreadModel
    클래스의 스레딩 모델입니다.프로젝트에 사용 되는 전역 개체 스레드 모델이 매개이 변수의 기본값입니다.

설명

CComEnum배열을 기반으로 하는 COM 열거자 개체를 정의 합니다.이 클래스와 유사 합니다 CComEnumOnSTL 는 STL 컨테이너를 기반으로 하는 열거자를 구현 합니다.이 클래스를 사용 하는 일반적인 단계는 다음과 같습니다.자세한 내용은 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 의 벡터를 노출 변형통해 s의 IEnumVariant 인터페이스.CVariantArrayCollection 단순히 클래스를 전문으로 CreateEnumerator 의이 유형 및 가공에 필요한 인수를 열거자 개체를 사용 합니다.

참고 항목

참조

CComObjectThreadModel

CComEnumImpl 클래스

CComObjectRootEx 클래스

기타 리소스

ATL 클래스 개요