Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu sınıf, diziyi temel alan bir COM numaralandırıcı nesnesi tanımlar.
Sözdizimi
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
Taban
COM numaralandırıcı arabirimi. Bir örnek için bkz . IEnumString .
piid
Numaralandırıcı arabiriminin arabirim kimliğinin işaretçisi.
T
Numaralandırıcı arabirimi tarafından kullanıma sunulan öğe türü.
Kopyala
Homojen bir kopyalama ilkesi sınıfı.
ThreadModel
Sınıfının iş parçacığı oluşturma modeli. Bu parametre varsayılan olarak projenizde kullanılan genel nesne iş parçacığı modelini kullanır.
Açıklamalar
CComEnum bir diziyi temel alan bir COM numaralandırıcı nesnesi tanımlar. Bu sınıf, C++ Standart Kitaplığı kapsayıcısını temel alan bir numaralandırıcı uygulayan CComEnumOnSTL ile benzerdir. Bu sınıfı kullanmaya yönelik tipik 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 bir uzmanlığı.typedefuzmanlık alanındaCComObjectşablon bağımsız değişkeni olarak kullanın.Özelleştirmenin bir örneğini
CComObjectoluşturun.CComEnumImpl::Init çağrısı yaparak numaralandırıcı nesnesini başlatın.
Numaralandırıcı arabirimini istemciye döndür.
Devralma Hiyerarşisi
CComObjectRootBase
Base
CComEnum
Gereksinimler
Üst bilgi: atlcom.h
Örnek
Aşağıda gösterilen kod, numaralandırıcı nesnesi oluşturmak ve başlatmak için yeniden kullanılabilir bir 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 işlev şablonu, aşağıda gösterildiği gibi bir koleksiyon arabiriminin özelliğini uygulamak _NewEnum için kullanılabilir:
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, arabirimi aracılığıyla IEnumVariant VARIANT'ların vektörünü kullanıma sunan bir için CComEnum oluştururtypedef. sınıfı CVariantArrayCollection yalnızca bu türdeki numaralandırıcı nesneleriyle çalışmak için uzmanlaşmıştır CreateEnumerator ve gerekli bağımsız değişkenleri geçirir.
Ayrıca bkz.
Sınıfa Genel Bakış
CComObjectThreadModel
CComEnumImpl Sınıfı
CComObjectRootEx Sınıfı