Aracılığıyla paylaş


CComEnumImpl Sınıfı

Bu sınıf, numaralandırılan öğelerin bir dizide depolandığı COM numaralandırıcı arabiriminin uygulamasını sağlar.

Sözdizimi

template <class Base,
    const IID* piid, class T, class Copy>
class ATL_NO_VTABLE CComEnumImpl : public Base

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ı.

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CComEnumImpl::CComEnumImpl Oluşturucu.
CComEnumImpl::~CComEnumImpl Yok edici.

Genel Yöntemler

Veri Akışı Adı Açıklama
CComEnumImpl::Clone Clone sabit listesi arabirimi yönteminin uygulanması.
CComEnumImpl::Init Numaralandırıcıyı başlatır.
CComEnumImpl::Next İleri'nin uygulanması.
CComEnumImpl::Reset Sıfırlama'nın uygulanması.
CComEnumImpl::Skip Skip uygulaması.

Ortak Veri Üyeleri

Veri Akışı Adı Açıklama
CComEnumImpl::m_begin Dizideki ilk öğeye işaret eden bir işaretçi.
CComEnumImpl::m_dwFlags üzerinden Initgeçirilen bayrakları kopyalayın.
CComEnumImpl::m_end Dizideki son öğenin hemen ötesindeki konumun işaretçisi.
CComEnumImpl::m_iter Dizideki geçerli öğeye işaret eden bir işaretçi.
CComEnumImpl::m_spUnk Numaralandırılmakta IUnknown olan koleksiyonu sağlayan nesnenin işaretçisi.

Açıklamalar

Yöntem uygulamaları örneği için bkz . IEnumString . CComEnumImpl , numaralandırılan öğelerin bir dizide depolandığı COM numaralandırıcı arabiriminin uygulamasını sağlar. Bu sınıf, C++ Standart Kitaplığı kapsayıcısını IEnumOnSTLImpl temel alan bir numaralandırıcı arabiriminin uygulanmasını sağlayan sınıfına benzer.

Not

ile arasındaki CComEnumImpl diğer farklar hakkında ayrıntılı bilgi için bkz. CComEnumImpl::Init.IEnumOnSTLImpl

Genellikle, bu arabirim uygulamasından türeterek kendi numaralandırıcı sınıfınızı oluşturmanız gerekmez . Bir diziyi temel alan ATL tarafından sağlanan bir numaralandırıcı kullanmak istiyorsanız, CComEnum örneği oluşturmak daha yaygındır.

Ancak, özel bir numaralandırıcı sağlamanız gerekiyorsa (örneğin, numaralandırıcı arabirimine ek olarak arabirimleri kullanıma sunan bir numaralandırıcı), bu sınıftan türetebilirsiniz. Bu durumda, kendi uygulamanızı sağlamak için CComEnumImpl::Clone yöntemini geçersiz kılmanız gerekebilir.

Daha fazla bilgi için bkz . ATL Koleksiyonları ve Numaralandırıcıları.

Devralma Hiyerarşisi

Base

CComEnumImpl

Gereksinimler

Üst bilgi: atlcom.h

CComEnumImpl::CComEnumImpl

Oluşturucu.

CComEnumImpl();

CComEnumImpl::~CComEnumImpl

Yok edici.

~CComEnumImpl();

CComEnumImpl::Init

Bir işaretçiyi numaralandırıcı arabirimine herhangi bir istemciye geri geçirmeden önce bu yöntemi çağırmalısınız.

HRESULT Init(
    T* begin,
    T* end,
    IUnknown* pUnk,
    CComEnumFlags flags = AtlFlagNoCopy);

Parametreler

başlamak
Numaralandırılacak öğeleri içeren dizinin ilk öğesinin işaretçisi.

son
Numaralandırılacak öğeleri içeren dizinin son öğesinin hemen ötesindeki konuma yönelik bir işaretçi.

Punk
[in] IUnknown Numaralandırıcının ömrü boyunca canlı tutulması gereken bir nesnenin işaretçisi. Böyle bir nesne yoksa NULL değerini geçirin.

Bayrak
Numaralandırıcının dizinin sahipliğini alıp almayacağını veya bir kopyasını oluşturup oluşturmayacağını belirten bayraklar. Olası değerler aşağıda açıklanmıştır.

Dönüş Değeri

Standart bir HRESULT değeri.

Açıklamalar

Bu yöntemi yalnızca bir kez çağırın; numaralandırıcıyı başlatın, kullanın ve ardından atın.

İşaretçileri başka bir nesnede tutulan bir dizideki öğelere geçirirseniz (ve numaralandırıcıdan verileri kopyalamasını istemezseniz), sabitleyicinin ihtiyaç duyduğu sürece nesnenin ve içerdiği dizinin kullanılabilir olduğundan emin olmak için pUnk parametresini kullanabilirsiniz. Numaralandırıcı, nesneyi canlı tutmak için nesne üzerinde bir COM başvurusu tutar. Numaralandırıcı yok edildiğinde COM başvurusu otomatik olarak serbest bırakılır.

flags parametresi, numaralandırıcının ona geçirilen dizi öğelerini nasıl ele alması gerektiğini belirtmenize olanak tanır. bayrakları aşağıda gösterilen numaralandırmadaki CComEnumFlags değerlerden birini alabilir:

enum CComEnumFlags
   {
   AtlFlagNoCopy = 0,
   AtlFlagTakeOwnership = 2, // BitOwn
   AtlFlagCopy = 3           // BitOwn | BitCopy
   };

AtlFlagNoCopy , dizinin ömrünün numaralandırıcı tarafından denetlenmediği anlamına gelir. Bu durumda dizi statik olacaktır veya pUnk tarafından tanımlanan nesne artık gerekli olmadığında diziyi serbest bıraktıktan sorumludur.

AtlFlagTakeOwnership , dizinin yok edilmesinin numaralandırıcı tarafından denetlenecek olduğu anlamına gelir. Bu durumda, dizi kullanılarak newdinamik olarak ayrılmış olmalıdır. Numaralandırıcı, yok edicisindeki diziyi siler. Genellikle pUnk için NULL geçirirsiniz, ancak herhangi bir nedenle numaralandırıcının yok olduğu hakkında bildirim almanız gerekiyorsa geçerli bir işaretçi geçirebilirsiniz.

AtlFlagCopy , öğesine geçirilen Initdizi kopyalanarak yeni bir dizi oluşturulacağı anlamına gelir. Yeni dizinin ömrü numaralandırıcı tarafından denetlenir. Numaralandırıcı, yok edicisindeki diziyi siler. Genellikle pUnk için NULL geçirirsiniz, ancak herhangi bir nedenle numaralandırıcının yok olduğu hakkında bildirim almanız gerekiyorsa geçerli bir işaretçi geçirebilirsiniz.

Not

Bu yöntemin prototipi, dizi öğelerini türü olarak Tbelirtir ve burada T sınıfına bir şablon parametresi olarak tanımlanmıştır. Bu, CComEnumImpl::Next COM arabirim yöntemi aracılığıyla kullanıma sunulan aynı türdür. Bunun etkisi, IEnumOnSTLImpl'nin aksine, bu sınıfın farklı depolamayı ve kullanıma sunulan veri türlerini desteklememesidir. Dizideki öğelerin veri türü, COM arabirimi aracılığıyla kullanıma sunulan veri türüyle aynı olmalıdır.

CComEnumImpl::Clone

Bu yöntem, türünde CComEnumbir nesnesi oluşturarak, geçerli nesne tarafından kullanılan aynı dizi ve yineleyici ile başlatarak ve yeni oluşturulan nesnede arabirimi döndürerek Clone yönteminin uygulanmasını sağlar.

STDMETHOD(Clone)(Base** ppEnum);

Parametreler

ppEnum
[out] Geçerli numaralandırıcıdan kopyalanan yeni oluşturulan bir nesnedeki numaralandırıcı arabirimi.

Dönüş Değeri

Standart bir HRESULT değeri.

Açıklamalar

Kopyalanan numaralandırıcıların, özgün numaralandırıcı tarafından kullanılan verilerin hiçbir zaman kendi kopyasını oluşturmadığını (veya sahipliğini almadığını) unutmayın. Gerekirse, kopyalanan numaralandırıcılar, verilerin ihtiyaç duydukları sürece kullanılabilir olduğundan emin olmak için özgün numaralandırıcıyı canlı tutar (COM başvurusu kullanarak).

CComEnumImpl::m_spUnk

Bu akıllı işaretçi, CComEnumImpl::Init'e geçirilen nesne üzerinde bir başvuru tutar ve numaralandırıcının ömrü boyunca canlı kalmasını sağlar.

CComPtr<IUnknown> m_spUnk;

CComEnumImpl::m_begin

Numaralandırılacak öğeleri içeren dizinin son öğesinin hemen ötesindeki konuma yönelik bir işaretçi.

T* m_begin;

CComEnumImpl::m_end

Numaralandırılacak öğeleri içeren dizinin ilk öğesinin işaretçisi.

T* m_end;

CComEnumImpl::m_iter

Numaralandırılacak öğeleri içeren dizinin geçerli öğesine yönelik bir işaretçi.

T* m_iter;

CComEnumImpl::m_dwFlags

CComEnumImpl::Init'e geçirilen bayraklar.

DWORD m_dwFlags;

CComEnumImpl::Next

Bu yöntem, Next yönteminin uygulanmasını sağlar.

STDMETHOD(Next)(ULONG celt, T* rgelt, ULONG* pceltFetched);

Parametreler

Celt
[in] İstenen öğe sayısı.

rgelt
[out] Öğelerle doldurulacak dizi.

pceltFetched
[out] Aslında rgelt içinde döndürülen öğelerin sayısı. Listede daha az celt öğesi kaldıysa, bu değer celt değerinden küçük olabilir.

Dönüş Değeri

Standart bir HRESULT değeri.

CComEnumImpl::Reset

Bu yöntem Reset yönteminin uygulanmasını sağlar.

STDMETHOD(Reset)(void);

Dönüş Değeri

Standart bir HRESULT değeri.

CComEnumImpl::Skip

Bu yöntem Skip yönteminin uygulanmasını sağlar.

STDMETHOD(Skip)(ULONG celt);

Parametreler

Celt
[in] Atlana öğe sayısı.

Dönüş Değeri

Standart bir HRESULT değeri.

Açıklamalar

Celt sıfırsa E_INVALIDARG döndürür, celt'den küçük öğeler döndürülürse S_FALSE döndürür, aksi takdirde S_OK döndürür.

Ayrıca bkz.

IEnumOnSTLImpl Sınıfı
CComEnum Sınıfı
Sınıfa Genel Bakış