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 Init geç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 new
dinamik 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 Init
dizi 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 T
belirtir 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 CComEnum
bir 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.