Klasa CComEnum
Ta klasa definiuje obiekt enumerator COM oparte na tablicy.
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
Base
Modułu wyliczającego COM (IEnumXXXX) interfejsu.piid
Wskaźnik na identyfikator interfejsu interfejsu modułu wyliczającego.T
Typ elementu przez interfejs moduł wyliczający.Copy
Jednorodnej kopię zasad klasy.ThreadModel
Model wątka klasy.Ten parametr jest domyślnie modelu wątków Obiekt globalny używany w projekcie.
Uwagi
CComEnumdefiniuje obiekt enumerator COM oparte na tablicy.Ta klasa jest analogiczne do CComEnumOnSTL który implementuje moduł wyliczający kontenerowi STL.Typowe kroki tej klasy są przedstawione poniżej.Aby uzyskać więcej informacji, zobacz Kolekcje ATL i moduły wyliczające.
Aby użyć tej klasy:
typedefspecjalizacji tej klasy.
Użyj typedef jako argument szablonu specjalizacji z CComObject.
Tworzenie instancji CComObject specjalizacji.
Zainicjowanie obiektu numeratora wywołując CComEnumImpl::Init.
Zwraca interfejs modułu wyliczającego do klienta.
Hierarchii dziedziczenia
CComObjectRootBase
Base
CComEnum
Wymagania
Nagłówek: atlcom.h
Przykład
Kod pokazany poniżej zawiera wielokrotnego użycia funkcji tworzenia i Inicjowanie obiekt enumerator.
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
Ta funkcja szablonu można zaimplementować _NewEnum właściwości interfejsu zbierania, 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.
Kod ten tworzy typedef do CComEnum miejscami wektor WARIANTUs poprzez IEnumVariant interfejsu.CVariantArrayCollection po prostu specjalizuje się klasy CreateEnumerator do pracy z modułu wyliczającego obiekty tego typu i przechodzi niezbędne argumenty.