CComEnum sınıfı
Bu sınıf üzerinde bir dizi temel com enumerator nesnesi tanımlar.
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 >
Parametreler
Base
com numaralayıcı (IEnumXXXX) arabirimi.piid
Numaralayıcı arabirimin arabirim kimliği için bir işaretçi.T
Numaralayıcı arabirimi tarafından sergilenen öğe türü.Copy
Homojen bir kopya ilke sınıfı.ThreadModel
Sınıf iş parçacığı modeli.Bu parametre, projenizde kullanılan genel nesnenin iş parçacığı modeli için varsayılan olarak ayarlanır.
Notlar
CComEnumbir dizi üzerinde temel alan bir com enumerator nesnesi tanımlar.Bu sınıf paraleldir CComEnumOnSTL stl kabında dayalı bir sýralayýcý uygular.Bu sınıf kullanmak için normal adımlar aşağıda özetlenmiştir.Daha fazla bilgi için bkz: atl koleksiyonları ve numaralandırıcıları.
Bu sınıf kullanmak için:
typedefBu sınıfın uzmanlığı.
Use typedef uzmanlığı şablon bağımsız değişken olarak CComObject.
Örneğini CComObject uzmanlığı.
Çağırarak enumerator nesnesi başlatılamıyor CComEnumImpl::Init.
Numaralayıcı arabirimini istemciye döndürür.
Devralma hiyerarşisi
CComObjectRootBase
Base
CComEnum
Gereksinimler
Başlık: atlcom.h
Örnek
Aşağıda gösterilen kod oluşturma ve bir enumerator nesnesi başlatılırken bir yeniden kullanılabilir işlev sağlar.
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
Bu şablon işlevi uygulamak için kullanılan _NewEnum aşağıda gösterildiği gibi bir koleksiyon arabirimi özelliği:
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.
Bu kod oluşturur bir typedef için CComEnum bir vektör sergiler VARIANTüzerinden s IEnumVariant arabirimi.CVariantArrayCollection class basitçe uzmanlaşmış CreateEnumerator bu tür ve geçişleri gerekli bağımsız değişken numaralayıcı nesneleriyle çalışmak için.