Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
typedefspecjalizacja tej klasy.typedefUżyj jako argumentu szablonu w specjalizacji .CComObjectUtwó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