// Strings.h : Declaration of the CStrings #ifndef __STRINGS_H_ #define __STRINGS_H_ #include "resource.h" // main symbols ///////////////////////////////////////////////////////////////////////////// // CStrings class ATL_NO_VTABLE CStrings : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { protected: BSTR *pMultiStrings; ULONG ArraySize; ULONG Count; VARIANT_BOOL IsCaseSensative; public: CStrings() { pMultiStrings = NULL; ArraySize = 0; Count = 0; IsCaseSensative = VARIANT_FALSE; } virtual ~CStrings(); DECLARE_REGISTRY_RESOURCEID(IDR_STRINGS) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CStrings) COM_INTERFACE_ENTRY(IStrings) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() // IStrings public: STDMETHOD(get_CaseSensative)(/*[out, retval]*/ VARIANT_BOOL *pVal); STDMETHOD(put_CaseSensative)(/*[in]*/ VARIANT_BOOL newVal); STDMETHOD(Find)(/*[in]*/ BSTR name,/*[out,retval]*/ long *pFound); STDMETHOD(Remove)(/*[in]*/ VARIANT Index); STDMETHOD(Insert)(/*[in]*/ VARIANT Index,/*[in]*/ VARIANT Value); STDMETHOD(Add)(/*[in]*/ VARIANT Value); STDMETHOD(get__NewEnum)(/*[out, retval]*/ IUnknown** ppUnk); STDMETHOD(Item)(/*[in]*/ VARIANT Index,/*[out, retval]*/ VARIANT * pVal); STDMETHOD(get_Count)(/*[out, retval]*/ long *pVal); // // helpers // BOOL InternalEnum(DWORD index,BSTR *pNext); HRESULT GetIndex(VARIANT *pIndex,DWORD *pAt); HRESULT FromMultiSz(LPCWSTR pMultiSz); HRESULT GetMultiSz(LPWSTR *pResult,DWORD *pSize); HRESULT InternalInsertString(DWORD Index,BSTR pString); HRESULT InternalInsertCollection(DWORD Index,IEnumVARIANT * pEnum); HRESULT InternalInsertArray(DWORD Index, VARTYPE vt,SAFEARRAY * pArray); HRESULT InternalInsertArrayDim(CComObject *pStringTemp, VARTYPE vt, SAFEARRAY *pArray,long *pDims,UINT dim,UINT dims); HRESULT InternalInsert(DWORD Index,LPVARIANT Value); HRESULT InternalAdd(LPCWSTR Value,UINT len); BOOL IncreaseArraySize(DWORD strings); }; #endif //__STRINGS_H_