CComEnum クラス
このクラスは、配列に基づいた COM 列挙子オブジェクトを定義します。
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 >
パラメーター
Base
COM 列挙子インターフェイス (IEnumXXXX)。piid
列挙子インターフェイスのインターフェイス ID へのポインター。T
列挙子インターフェイスによって公開される項目の種類。Copy
同種 コピー ポリシー クラス。ThreadModel
クラスのスレッド処理モデル。このパラメーターは、プロジェクトに使用するグローバル オブジェクトのスレッド モデルになります。
解説
CComEnum は、配列に基づいた COM 列挙子オブジェクトを定義します。STL コンテナーに基づいて列挙子を実装するクラスは、この CComEnumOnSTL に似ています。このクラスを使用する一般的な手順を次説明します。詳細については、ATL のコレクションと列挙子を参照してください。
このクラスを使用するには、次の手順に従います。
typedef このクラスの特殊化。
CComObjectの特殊化でテンプレート引数として typedef を使用します。
CComObject の特化型のインスタンスを作成します。
CComEnumImpl::Initを呼び出して、列挙子オブジェクトを初期化します。
クライアントに列挙子インターフェイスを返します。
継承階層
CComObjectRootBase
Base
CComEnum
必要条件
ヘッダー : atlcom.h
使用例
以下のコードは、列挙子オブジェクトを作成および初期化するために、再利用可能な関数を提供します。
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
このテンプレート関数は、次に示すように、コレクション インターフェイスの _NewEnum のプロパティを実装するために使用できます:
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.
IEnumVariant のインターフェイスを通じて VARIANT、のベクターを公開するこのコードは CComEnum の typedef を作成します。CVariantArrayCollection のクラスはこの型の列挙子オブジェクトを使用するに CreateEnumerator を単純に特化して、必要な引数を渡します。