Klasa CComEnum
Ta klasa definiuje obiekt modułu wyliczającego COM na podstawie tablicy.
Składnia
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>
Parametry
Baza
Interfejs modułu wyliczającego COM. Zobacz przykład IEnumString .
piid
Wskaźnik do identyfikatora interfejsu interfejsu modułu wyliczającego.
T
Typ elementu uwidocznionego przez interfejs modułu wyliczającego.
kopia
Homogeniczną klasę zasad kopiowania.
ThreadModel
Model wątkowy klasy. Ten parametr jest domyślny dla globalnego modelu wątku obiektu używanego w projekcie.
Uwagi
CComEnum
definiuje obiekt modułu wyliczającego COM na podstawie tablicy. Ta klasa jest analogiczna do biblioteki CComEnumOnSTL , która implementuje moduł wyliczający oparty na kontenerze biblioteki standardowej języka C++. Poniżej przedstawiono typowe kroki korzystania z tej klasy. Aby uzyskać więcej informacji, zobacz Kolekcje i moduły wyliczania ATL.
Aby użyć tej klasy:
typedef
specjalizacja tej klasy.typedef
Użyj jako argumentu szablonu w specjalizacji .CComObject
Utwórz wystąpienie specjalizacji
CComObject
.Zainicjuj obiekt modułu wyliczającego, wywołując polecenie CComEnumImpl::Init.
Zwróć interfejs modułu wyliczającego do klienta.
Hierarchia dziedziczenia
CComObjectRootBase
Base
CComEnum
Wymagania
Nagłówek: atlcom.h
Przykład
Poniższy kod udostępnia funkcję wielokrotnego użytku do tworzenia i inicjowania obiektu modułu wyliczającego.
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
Za pomocą tego szablonu funkcji można zaimplementować _NewEnum
właściwość interfejsu kolekcji, jak pokazano poniżej:
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.
Ten kod tworzy typedef
element , CComEnum
który uwidacznia wektor VARIANTów za pośrednictwem interfejsu IEnumVariant
. Klasa CVariantArrayCollection
po prostu specjalizuje się CreateEnumerator
w pracy z obiektami modułu wyliczającego tego typu i przekazuje niezbędne argumenty.
Zobacz też
Omówienie klasy
CComObjectThreadModel
Klasa CComEnumImpl
Klasa CComObjectRootEx