/*=================================================================== Microsoft Denali Microsoft Confidential. Copyright 1997 Microsoft Corporation. All Rights Reserved. Component: MetaUtil object File: PropCol.h Owner: t-BrianM This file contains the headers for the property collection and property object. ===================================================================*/ #ifndef __PROPCOL_H_ #define __PROPCOL_H_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "resource.h" // main symbols /* * C P r o p e r t y C o l l e c t i o n * * Implements property collections */ class CPropertyCollection : public IDispatchImpl, public ISupportErrorInfo, public CComObjectRoot { public: CPropertyCollection(); HRESULT Init(const CComPtr &pIMeta, CMetaSchemaTable *pCSchemaTable, LPTSTR tszKey); ~CPropertyCollection(); BEGIN_COM_MAP(CPropertyCollection) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IPropertyCollection) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CPropertyCollection) // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); // IPropertyCollection STDMETHOD(get_Count)(/*[out, retval]*/ long *plReturn); STDMETHOD(get_Item)(/*[in]*/ long lIndex, /*[out, retval]*/ LPDISPATCH *ppIReturn); STDMETHOD(get__NewEnum)(/*[out, retval]*/ LPUNKNOWN *ppIReturn); STDMETHOD(Get)(/*[in]*/ VARIANT varId, /*[out, retval]*/ IProperty **ppIReturn); STDMETHOD(Add)(/*[in]*/ VARIANT varId, /*[out, retval]*/ IProperty **ppIReturn); STDMETHOD(Remove)(/*[in]*/ VARIANT varId); private: LPTSTR m_tszKey; // Pointer to IMSAdminBase so we don't have to recreate it multiple times CComPtr m_pIMeta; CMetaSchemaTable *m_pCSchemaTable; }; /* * C P r o p e r t y E n u m * * Implements property enumberations */ class CPropertyEnum : public IEnumVARIANT, public CComObjectRoot { public: CPropertyEnum(); HRESULT Init(const CComPtr &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, int iIndex); ~CPropertyEnum(); BEGIN_COM_MAP(CPropertyEnum) COM_INTERFACE_ENTRY(IEnumVARIANT) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CPropertyEnum) //IEnumVARIANT STDMETHOD(Next)(unsigned long ulNumToGet, VARIANT FAR* rgvarDest, unsigned long FAR* pulNumGot); STDMETHOD(Skip)(unsigned long ulNumToSkip); STDMETHOD(Reset)(); STDMETHOD(Clone)(IEnumVARIANT FAR* FAR* ppIReturn); private: int m_iIndex; LPTSTR m_tszKey; // Pointer to IMSAdminBase so we don't have to recreate it multiple times CComPtr m_pIMeta; CMetaSchemaTable *m_pCSchemaTable; }; /* * C P r o p e r t y * * Implements property objects. */ class CProperty : public IDispatchImpl, public ISupportErrorInfo, public CComObjectRoot { public: CProperty(); HRESULT Init(const CComPtr &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, DWORD dwId, BOOL bCreate); HRESULT Init(const CComPtr &pIMeta, CMetaSchemaTable *pCSchemaTable, LPCTSTR tszKey, METADATA_RECORD *mdr); ~CProperty(); BEGIN_COM_MAP(CProperty) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IProperty) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CProperty) // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); // IProperty STDMETHOD(get_Id)(/*[out, retval]*/ long *plId); STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pbstrName); STDMETHOD(get_Attributes)(/*[out, retval]*/ long *plAttributes); STDMETHOD(put_Attributes)(/*[in]*/ long plAttributes); STDMETHOD(get_UserType)(/*[out, retval]*/ long *plAttributes); STDMETHOD(put_UserType)(/*[in]*/ long plAttributes); STDMETHOD(get_DataType)(/*[out, retval]*/ long *plAttributes); STDMETHOD(put_DataType)(/*[in]*/ long plAttributes); STDMETHOD(get_Data)(/*[out, retval]*/ VARIANT *pvarData); STDMETHOD(put_Data)(/*[in]*/ VARIANT varData); STDMETHOD(Write)(); private: LPTSTR m_tszKey; DWORD m_dwId; DWORD m_dwAttributes; DWORD m_dwUserType; DWORD m_dwDataType; VARIANT m_varData; // Pointer to IMSAdminBase so we don't have to recreate it multiple times CComPtr m_pIMeta; CMetaSchemaTable *m_pCSchemaTable; HRESULT SetDataToVar(BYTE *pbData, DWORD dwDataLen); HRESULT GetDataFromVar(BYTE * &pbData, DWORD &dwDataLen); }; #endif //ifndef __PROPCOL_H_