/*++ Copyright (c) 1996 Microsoft Corporation Module Name: item.h Abstract: This module contains the definition for the Server Extension Object Item class. Author: Don Dumitru (dondu@microsoft.com) Revision History: dondu 02/18/97 created --*/ // item.h : Declaration of the CSEODictionaryItem ///////////////////////////////////////////////////////////////////////////// // CSEODictionaryItem class ATL_NO_VTABLE CSEODictionaryItem : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { public: HRESULT FinalConstruct(); void FinalRelease(); DECLARE_PROTECT_FINAL_CONSTRUCT(); DECLARE_REGISTRY_RESOURCEID_EX(IDR_StdAfx, L"SEODictionaryItem Class", L"SEO.SEODictionaryItem.1", L"SEO.SEODictionaryItem"); DECLARE_GET_CONTROLLING_UNKNOWN(); BEGIN_COM_MAP(CSEODictionaryItem) COM_INTERFACE_ENTRY(ISEODictionaryItem) COM_INTERFACE_ENTRY(IDispatch) // COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p) END_COM_MAP() // ISEODictionaryItem public: HRESULT STDMETHODCALLTYPE get_Value(VARIANT *pvarIndex, VARIANT *pvarResult); HRESULT STDMETHODCALLTYPE AddValue(VARIANT *pvarIndex, VARIANT *pvarValue); HRESULT STDMETHODCALLTYPE DeleteValue(VARIANT *pvarIndex); HRESULT STDMETHODCALLTYPE get_Count(VARIANT *pvarResult); HRESULT STDMETHODCALLTYPE GetStringA(DWORD dwIndex, DWORD *pchCount, LPSTR pszResult); HRESULT STDMETHODCALLTYPE GetStringW(DWORD dwIndex, DWORD *pchCount, LPWSTR pszResult); HRESULT STDMETHODCALLTYPE AddStringA(DWORD dwIndex, LPCSTR pszValue); HRESULT STDMETHODCALLTYPE AddStringW(DWORD dwIndex, LPCWSTR pszValue); private: class ValueClass { public: ValueClass(); ValueClass(ValueClass& vcFrom); ~ValueClass(); void Init(); void Clear(); HRESULT Assign(ValueClass& vcFrom); HRESULT Assign(LPCSTR pszFromA); HRESULT Assign(VARIANT *pvarFrom); HRESULT Assign(LPCWSTR pszFromW); HRESULT AsVariant(VARIANT *pvarResult); HRESULT AsStringA(DWORD *pchCount, LPSTR pszResult); HRESULT AsStringW(DWORD *pchCount, LPWSTR pszResult); void *operator new(size_t cbSize, ValueClass *pvcInPlace); void operator delete(void * p) {} #if _MSC_VER >= 1200 void operator delete(void * p, ValueClass *pvcInPlace) {} #endif private: typedef enum tagValueEnum { veNone, veStringA, veVARIANT } ValueEnum; typedef struct tagValueType { ValueEnum veType; union { LPSTR pszStringA; VARIANT varVARIANT; }; } ValueType; ValueType m_vtValue; }; HRESULT AddSlot(DWORD *pdwIndex,ValueClass **ppvcResult); DWORD m_dwCount; ValueClass *m_pvcValues; CComPtr m_pUnkMarshaler; };