Třída CComEnum
Tato třída definuje objekt enumerator COM založené na pole.
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
Čítač výčtu COM (IEnumXXXX) rozhraní.piid
Ukazatel na ID rozhraní čítač rozhraní.T
Typ položky prezentována čítač rozhraní.Copy
Homogenní třídy kopie zásady.ThreadModel
Model podprocesů třídy.Tento parametr výchozí globální objektový model podprocesu použit v projektu.
Poznámky
CComEnumdefinuje objekt enumerator COM založené na matici.Tato třída je analogická CComEnumOnSTL provádí čítač výčtu založené na kontejneru STL.Typické kroky pro používání této třídy jsou uvedeny níže.Další informace naleznete v tématu kolekce ATL a čítače výčtu.
Pomocí této třídy:
typedefspecializace této třídy.
Použití typedef jako argument šablony v specializace z CComObject .
Vytvořit instanci CComObject specializace.
Inicializovat objekt enumerator voláním CComEnumImpl::Init.
Čítač rozhraní vrátíte klientovi.
Hierarchii dědičnosti
CComObjectRootBase
Base
CComEnum
Požadavky
Záhlaví: atlcom.h
Příklad
Kód níže obsahuje opakovaně použitelné funkce pro vytvoření a inicializace objektu 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
Tato funkce šablony lze použít k implementaci _NewEnum vlastnosti rozhraní sběru, jak je ukázá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 pro CComEnum poskytuje vektor VARIANTYs až IEnumVariant rozhraní.CVariantArrayCollection třídy jednoduše specializuje CreateEnumerator práce s objekty čítače výčtu tohoto typu a průchody potřebné argumenty.