다음을 통해 공유


CComEnumImpl 클래스

이 클래스는 열거 중인 항목이 배열에 저장되는 COM 열거자 인터페이스에 대한 구현을 제공합니다.

구문

template <class Base,
    const IID* piid, class T, class Copy>
class ATL_NO_VTABLE CComEnumImpl : public Base

매개 변수

Base
COM 열거자 인터페이스입니다. 예제는 IEnumString을 참조하세요.

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

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

복사
같은 유형의 복사 정책 클래스입니다.

멤버

공용 생성자

속성 설명
CComEnumImpl::CComEnumImpl 생성자입니다.
CComEnumImpl::~CComEnumImpl 소멸자입니다.

공용 메서드

이름 설명
CComEnumImpl::Clone Clone 열거형 인터페이스 메서드의 구현입니다.
CComEnumImpl::Init 열거자를 초기화합니다.
CComEnumImpl::Next Next구현입니다.
CComEnumImpl::Reset Reset의 구현입니다.
CComEnumImpl::Skip Skip의 구현입니다.

공용 데이터 멤버

속성 설명
CComEnumImpl::m_begin 배열의 첫 번째 항목에 대한 포인터입니다.
CComEnumImpl::m_dwFlags 전달된 플래그를 복사합니다 Init.
CComEnumImpl::m_end 배열의 마지막 항목 바로 다음 위치에 대한 포인터입니다.
CComEnumImpl::m_iter 배열의 현재 항목에 대한 포인터입니다.
CComEnumImpl::m_spUnk IUnknown 열거 중인 컬렉션을 제공하는 개체의 포인터입니다.

설명

메서드 구현의 예는 IEnumString을 참조하세요. CComEnumImpl 는 열거되는 항목이 배열에 저장되는 COM 열거자 인터페이스에 대한 구현을 제공합니다. 이 클래스는 C++ 표준 라이브러리 컨테이너를 기반으로 하는 열거자 인터페이스의 구현을 제공하는 클래스와 유사 IEnumOnSTLImpl 합니다.

참고 항목

차이점에 대한 CComEnumImpl IEnumOnSTLImpl자세한 내용은 CComEnumImpl::Init를 참조하세요.

일반적으로 이 인터페이스 구현에서 파생하여 고유한 열거자 클래스를 만들 필요가 없습니다 . 배열을 기반으로 ATL 제공 열거자를 사용하려는 경우 CComEnum 인스턴스를 만드는 것이 더 일반적입니다.

그러나 사용자 지정 열거자(예: 열거자 인터페이스 외에 인터페이스를 노출하는 열거자)를 제공해야 하는 경우 이 클래스에서 파생할 수 있습니다. 이 경우 고유한 구현을 제공하기 위해 CComEnumImpl::Clone 메서드를 재정의해야 할 수 있습니다.

자세한 내용은 ATL 컬렉션 및 열거자를 참조 하세요.

상속 계층 구조

Base

CComEnumImpl

요구 사항

헤더: atlcom.h

CComEnumImpl::CComEnumImpl

생성자입니다.

CComEnumImpl();

CComEnumImpl::~CComEnumImpl

소멸자입니다.

~CComEnumImpl();

CComEnumImpl::Init

열거자 인터페이스에 대한 포인터를 클라이언트에 다시 전달하기 전에 이 메서드를 호출해야 합니다.

HRESULT Init(
    T* begin,
    T* end,
    IUnknown* pUnk,
    CComEnumFlags flags = AtlFlagNoCopy);

매개 변수

begin
열거할 항목을 포함하는 배열의 첫 번째 요소에 대한 포인터입니다.

end
열거할 항목을 포함하는 배열의 마지막 요소 바로 다음 위치에 대한 포인터입니다.

pUnk
[in] IUnknown 열거자의 수명 동안 활성 상태로 유지해야 하는 개체의 포인터입니다. 이러한 개체가 없으면 NULL을 전달합니다.

flags
열거자가 배열의 소유권을 가져올지 아니면 복사본을 만들어야 하는지 여부를 지정하는 플래그입니다. 가능한 값은 아래에 설명되어 있습니다.

Return Value

표준 HRESULT 값입니다.

설명

이 메서드를 한 번만 호출합니다. 열거자를 초기화하고 사용한 다음 버릴 수 있습니다.

다른 개체에 있는 배열의 항목에 포인터를 전달하고 열거자에게 데이터를 복사하도록 요청하지 않는 경우 pUnk 매개 변수를 사용하여 열거자가 필요한 한 개체와 해당 개체가 보유하는 배열을 사용할 수 있도록 할 수 있습니다. 열거자는 개체에 대한 COM 참조를 보유하여 활성 상태로 유지합니다. COM 참조는 열거자가 제거되면 자동으로 해제됩니다.

flags 매개 변수를 사용하면 열거자가 전달된 배열 요소를 처리하는 방법을 지정할 수 있습니다. 플래그는 아래 표시된 열거형의 CComEnumFlags 값 중 하나를 사용할 수 있습니다.

enum CComEnumFlags
   {
   AtlFlagNoCopy = 0,
   AtlFlagTakeOwnership = 2, // BitOwn
   AtlFlagCopy = 3           // BitOwn | BitCopy
   };

AtlFlagNoCopy 는 배열의 수명이 열거자에 의해 제어되지 않음을 의미합니다. 이 경우 배열은 정적이거나 pUnk식별된 개체는 더 이상 필요하지 않을 때 배열을 해제합니다.

AtlFlagTakeOwnership 는 배열의 소멸이 열거자에 의해 제어된다는 것을 의미합니다. 이 경우 배열은 .를 사용하여 new동적으로 할당되어야 합니다. 열거자는 소멸자의 배열을 삭제합니다. 일반적으로 pUnk에 대해 NULL을 전달하지만, 어떤 이유로 열거자 소멸에 대한 알림을 받아야 하는 경우에도 유효한 포인터를 전달할 수 있습니다.

AtlFlagCopy 는 전달된 배열을 복사하여 새 배열을 만들 수 있음을 의미합니다 Init. 새 배열의 수명은 열거자에 의해 제어됩니다. 열거자는 소멸자의 배열을 삭제합니다. 일반적으로 pUnk에 대해 NULL을 전달하지만, 어떤 이유로 열거자 소멸에 대한 알림을 받아야 하는 경우에도 유효한 포인터를 전달할 수 있습니다.

참고 항목

이 메서드의 프로토타입은 배열 요소를 클래스에 대한 템플릿 매개 변수로 정의된 형식 TT 으로 지정합니다. COM 인터페이스 메서드 CComEnumImpl::Next를 통해 노출되는 형식과 동일합니다. 이는 IEnumOnSTLImpl과 달리 이 클래스는 다른 스토리지 및 노출된 데이터 형식을 지원하지 않는다는 의미입니다. 배열에 있는 요소의 데이터 형식은 COM 인터페이스를 통해 노출되는 데이터 형식과 동일해야 합니다.

CComEnumImpl::Clone

이 메서드는 형식CComEnum개체를 만들고, 현재 개체에서 사용하는 동일한 배열 및 반복기로 초기화하고, 새로 만든 개체에서 인터페이스를 반환하여 Clone 메서드의 구현을 제공합니다.

STDMETHOD(Clone)(Base** ppEnum);

매개 변수

ppEnum
[out] 현재 열거자에서 복제된 새로 만든 개체의 열거자 인터페이스입니다.

Return Value

표준 HRESULT 값입니다.

설명

복제된 열거자는 원래 열거자가 사용하는 데이터의 복사본을 직접 만들거나 소유권을 가지지 않습니다. 필요한 경우 복제된 열거자는 원래 열거자를 활성 상태로 유지(COM 참조 사용)하여 필요한 한 데이터를 사용할 수 있도록 합니다.

CComEnumImpl::m_spUnk

이 스마트 포인터는 CComEnumImpl::Init전달된 개체에 대한 참조를 유지하여 열거자의 수명 동안 활성 상태로 유지되도록 합니다.

CComPtr<IUnknown> m_spUnk;

CComEnumImpl::m_begin

열거할 항목을 포함하는 배열의 마지막 요소 바로 다음 위치에 대한 포인터입니다.

T* m_begin;

CComEnumImpl::m_end

열거할 항목을 포함하는 배열의 첫 번째 요소에 대한 포인터입니다.

T* m_end;

CComEnumImpl::m_iter

열거할 항목을 포함하는 배열의 현재 요소에 대한 포인터입니다.

T* m_iter;

CComEnumImpl::m_dwFlags

CComEnumImpl::Init에 전달된 플래그입니다.

DWORD m_dwFlags;

CComEnumImpl::Next

이 메서드는 Next 메서드의 구현을 제공합니다.

STDMETHOD(Next)(ULONG celt, T* rgelt, ULONG* pceltFetched);

매개 변수

celt
[in] 요청된 요소의 수입니다.

rgelt
[out] 요소로 채울 배열입니다.

pceltFetched
[out] rgelt에서 실제로 반환되는 요소의 수입니다. 이 값은 목록에 남아 있는 셀트 요소보다 작을 경우 셀트보다 작을 수 있습니다.

Return Value

표준 HRESULT 값입니다.

CComEnumImpl::Reset

이 메서드는 Reset 메서드의 구현을 제공합니다.

STDMETHOD(Reset)(void);

Return Value

표준 HRESULT 값입니다.

CComEnumImpl::Skip

이 메서드는 Skip 메서드의 구현을 제공합니다.

STDMETHOD(Skip)(ULONG celt);

매개 변수

celt
[in] 건너뛸 요소의 수입니다.

Return Value

표준 HRESULT 값입니다.

설명

celt가 0이면 E_INVALIDARG 반환하고, 셀트 요소보다 작으면 S_FALSE 반환하고, 그렇지 않으면 S_OK 반환합니다.

참고 항목

IEnumOnSTLImpl 클래스
CComEnum 클래스
클래스 개요