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 列舉值介面。 如需範例,請參閱 IEnumString 。
piid
列舉值介面之介面標識碼的指標。
T
列舉值介面所公開的項目類型。
複製
同質 複製原則類別。
ThreadModel
類別的線程模型。 此參數預設為專案中所使用的全域物件線程模型。
備註
CComEnum
根據陣列定義 COM 列舉值物件。 這個類別類似於 CComEnumOnSTL ,它會根據標準連結庫容器C++實作列舉值。 使用這個類別的一般步驟如下所述。 如需詳細資訊,請參閱 ATL 集合和列舉值。
若要使用此類別:
typedef
這個類別的特製化。typedef
使用 做為 特製化的CComObject
樣板自變數。建立特製化的實例
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.
此程式代碼會 typedef
建立 , CComEnum
以透過 IEnumVariant
介面公開 VARIANT 的向量。 類別 CVariantArrayCollection
只會專門 CreateEnumerator
處理此類型的列舉值物件,並傳遞必要的自變數。
另請參閱
類別概觀
CComObjectThreadModel
CComEnumImpl 類別
CComObjectRootEx 類別