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
열거자 인터페이스의 인터페이스 ID에 대한 포인터입니다.
T
열거자 인터페이스에 의해 노출되는 항목의 형식입니다.
복사
같은 유형의 복사 정책 클래스입니다.
ThreadModel
클래스의 스레딩 모델입니다. 이 매개 변수는 기본적으로 프로젝트에 사용되는 전역 개체 스레드 모델로 설정됩니다.
설명
CComEnum
는 배열을 기반으로 COM 열거자 개체를 정의합니다. 이 클래스는 C++ 표준 라이브러리 컨테이너를 기반으로 열거자를 구현하는 CComEnumOnSTL과 유사합니다. 이 클래스를 사용하는 일반적인 단계는 아래에 설명되어 있습니다. 자세한 내용은 ATL 컬렉션 및 열거자를 참조 하세요.
이 클래스를 사용하려면 다음을 수행합니다.
typedef
이 클래스의 특수화입니다.의
typedef
특수화CComObject
에서 템플릿 인수로 사용합니다.특수화의 인스턴스를
CComObject
만듭니다.CComEnumImpl::Init를 호출하여 열거자 개체를 초기화합니다.
클라이언트에 열거자 인터페이스를 반환합니다.
상속 계층 구조
CComObjectRootBase
Base
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
통해 VARIANT의 벡터를 노출하는 for CComEnum
를 IEnumVariant
만듭니다. 클래스는 CVariantArrayCollection
단순히 이 형식의 열거자 개체로 작업하도록 특수화 CreateEnumerator
하고 필요한 인수를 전달합니다.
참고 항목
클래스 개요
CComObjectThreadModel
CComEnumImpl 클래스
CComObjectRootEx 클래스