CComEnum – třída
Tato třída definuje objekt enumerátoru MODELU COM na základě pole.
Syntaxe
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
Základna
Rozhraní enumerátoru COM. Příklad najdete v souboru IEnumString .
piid
Ukazatel na ID rozhraní enumerátoru.
T
Typ položky vystavené rozhraním enumerátoru.
Kopírování
Homogenní třída zásad kopírování.
ThreadModel
Model threading třídy. Tento parametr ve výchozím nastavení použije globální model vlákna objektu použitý v projektu.
Poznámky
CComEnum
definuje objekt enumerátoru MODELU COM na základě pole. Tato třída je podobná CComEnumOnSTL , která implementuje enumerátor založený na kontejneru standardní knihovny C++. Typické kroky pro použití této třídy jsou popsány níže. Další informace naleznete v tématu ATL Collections and Enumerators.
Chcete-li použít tuto třídu:
typedef
specializace této třídy.typedef
Použijte jako argument šablony v specializaci .CComObject
Vytvořte instanci
CComObject
specializace.Inicializace enumerator objektu volání CComEnumImpl::Init.
Vraťte rozhraní enumerátoru klientovi.
Hierarchie dědičnosti
CComObjectRootBase
Base
CComEnum
Požadavky
Hlavička: atlcom.h
Příklad
Níže uvedený kód poskytuje opakovaně použitelnou funkci pro vytvoření a inicializaci objektu enumerátoru.
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
Tuto šablonu funkce lze použít k implementaci _NewEnum
vlastnosti rozhraní kolekce, jak je znázorněno níže:
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.
Tento kód vytvoří typedef
vektor CComEnum
VARIANTs prostřednictvím IEnumVariant
rozhraní. Třída CVariantArrayCollection
se jednoduše specializuje CreateEnumerator
na práci s objekty enumerátoru tohoto typu a předává nezbytné argumenty.
Viz také
Přehled třídy
CComObjectThreadModel
CComEnumImpl – třída
CComObjectRootEx – třída