///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998-1999 Microsoft Corporation // // Module Name: // PropertyValue.h // // Description: // Definition of the cluster property value classes for the MSCLUS automation // classes. // // Implementation File: // PropertyValue.cpp // // Author: // Galen Barbee (GalenB) 16-Dec-1998 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #ifndef __PROPERTYVALUE_H__ #define __PROPERTYVALUE_H__ #ifndef _PROPLIST_H_ #if CLUSAPI_VERSION >= 0x0500 #include #else #include "PropList.h" #endif // CLUSAPI_VERSION >= 0x0500 #endif ///////////////////////////////////////////////////////////////////////////// // Forward Class Declarations ///////////////////////////////////////////////////////////////////////////// class CClusPropertyValueData; class CClusPropertyValue; class CClusPropertyValues; ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusPropertyValueData // // Description: // Cluster Properties Collection Automation Class. // // Inheritance: // IDispatchImpl< ISClusPropertyValueData, &IID_ISClusPropertyValueData, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER > // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusPropertyValueData, &CLSID_ClusPropertyValueData > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusPropertyValueData : public IDispatchImpl< ISClusPropertyValueData, &IID_ISClusPropertyValueData, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusPropertyValueData, &CLSID_ClusPropertyValueData > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: typedef std::vector< CComVariant > CClusPropertyValueDataVector; CClusPropertyValueData( void ); ~CClusPropertyValueData( void ); BEGIN_COM_MAP(CClusPropertyValueData) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusPropertyValueData) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusPropertyValueData) DECLARE_NO_REGISTRY() void Clear( void ); private: CClusPropertyValueDataVector m_cpvdvData; DWORD m_dwFlags; CLUSTER_PROPERTY_FORMAT m_cpfFormat; HRESULT GetIndex( IN VARIANT varIndex, OUT UINT * pnIndex ); HRESULT HrCreateMultiSz( IN CLUSPROP_BUFFER_HELPER cbhValue ); HRESULT HrCreateBinary( IN CLUSPROP_BUFFER_HELPER cbhValue ); public: HRESULT Create( IN VARIANT varValue, IN CLUSTER_PROPERTY_FORMAT cpfFormat, IN BOOL bReadOnly ); HRESULT Create( IN CLUSPROP_BUFFER_HELPER cbhValue, IN BOOL bReadOnly ); STDMETHODIMP get_Count( OUT long * plCount ); STDMETHODIMP get_Item( IN VARIANT varIndex, OUT VARIANT * pvarValue ); STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk ); STDMETHODIMP CreateItem( IN VARIANT varValue, OUT VARIANT * pvarData ); STDMETHODIMP RemoveItem( IN VARIANT varIndex ); CComVariant & operator[]( IN int nIndex ) { return m_cpvdvData[ nIndex ]; }; const CComVariant & operator=( IN const CComVariant & varValue ); const CClusPropertyValueDataVector & DataList( void ) const { return m_cpvdvData; }; HRESULT HrFillMultiSzBuffer( OUT LPWSTR * ppsz ) const; HRESULT HrBinaryValue( IN SAFEARRAY * psa ); }; ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusPropertyValue // // Description: // Cluster Property Automation Class. // // Inheritance: // IDispatchImpl< ISClusPropertyValue, &IID_ISClusPropertyValue, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusPropertyValue, &CLSID_ClusProperty > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusPropertyValue : public IDispatchImpl< ISClusPropertyValue, &IID_ISClusPropertyValue, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusPropertyValue, &CLSID_ClusPropertyValue > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: CClusPropertyValue( void ); ~CClusPropertyValue( void ); BEGIN_COM_MAP(CClusPropertyValue) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusPropertyValue) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusPropertyValue) DECLARE_NO_REGISTRY() HRESULT Create( IN VARIANT varValue, IN CLUSTER_PROPERTY_TYPE cptType, IN CLUSTER_PROPERTY_FORMAT cpfFormat, IN size_t cbLength, IN BOOL bReadOnly ); HRESULT Create( IN CLUSPROP_BUFFER_HELPER cbhValue, IN BOOL bReadOnly ); STDMETHODIMP get_Value( OUT VARIANT * pvarValue ); STDMETHODIMP put_Value( IN VARIANT varValue ); STDMETHODIMP get_Type( OUT CLUSTER_PROPERTY_TYPE * pcptType ); STDMETHODIMP put_Type( IN CLUSTER_PROPERTY_TYPE cptType ); STDMETHODIMP get_Format( OUT CLUSTER_PROPERTY_FORMAT * pcpfFormat ); STDMETHODIMP put_Format( IN CLUSTER_PROPERTY_FORMAT cpfFormat ); STDMETHODIMP get_Length( OUT long * plLength ); STDMETHODIMP get_DataCount( OUT long * plCount ); STDMETHODIMP get_Data( OUT ISClusPropertyValueData ** ppClusterPropertyValueData ); BOOL Modified( void ) const { return ( m_dwFlags & MODIFIED ); } BOOL Modified( IN BOOL bModified ); const CComVariant & Value( void ) const { return (*m_pcpvdData)[ 0 ]; }; DWORD CbLength( void ) const {return m_cbLength; }; CComVariant Value( IN const CComVariant & rvarValue ); HRESULT HrBinaryValue( IN SAFEARRAY * psa ); CComObject< CClusPropertyValueData > * Data( void ) const { return m_pcpvdData; }; private: DWORD m_dwFlags; CLUSTER_PROPERTY_TYPE m_cptType; CLUSTER_PROPERTY_FORMAT m_cpfFormat; CComObject< CClusPropertyValueData > * m_pcpvdData; size_t m_cbLength; }; ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusPropertyValues // // Description: // Cluster Properties Collection Automation Class. // // Inheritance: // IDispatchImpl< ISClusPropertyValues, &IID_ISClusPropertyValues, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER > // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusPropertyValues, &CLSID_ClusProperties > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusPropertyValues : public IDispatchImpl< ISClusPropertyValues, &IID_ISClusPropertyValues, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusPropertyValues, &CLSID_ClusPropertyValues > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: typedef std::vector< CComObject< CClusPropertyValue > * > CClusPropertyValueVector; CClusPropertyValues( void ); ~CClusPropertyValues( void ); BEGIN_COM_MAP(CClusPropertyValues) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusPropertyValues) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusPropertyValues) DECLARE_NO_REGISTRY() void Clear( void ); private: CClusPropertyValueVector m_cpvvValues; HRESULT HrGetVariantLength( IN const VARIANT rvarValue, OUT PDWORD pcbLength, IN CLUSTER_PROPERTY_FORMAT cpfFormat ); HRESULT GetIndex( IN VARIANT varIndex, OUT UINT * pnIndex ); HRESULT HrFillPropertyValuesVector( IN OUT CClusPropValueList & cplPropValueList, IN BOOL bReadOnly ); public: HRESULT Create( IN const CClusPropValueList & pvlValue, IN BOOL bReadOnly ); HRESULT Create( IN VARIANT varValue, IN CLUSTER_PROPERTY_TYPE cptType, IN CLUSTER_PROPERTY_FORMAT cpfFormat, IN BOOL bReadOnly ); STDMETHODIMP get_Count( OUT long * plCount ); STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusPropertyValue ** ppPropertyValue ); STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk ); STDMETHODIMP CreateItem( IN BSTR bstrName, IN VARIANT varValue, OUT ISClusPropertyValue ** ppPropertyValue ); STDMETHODIMP RemoveItem( IN VARIANT varIndex ); CComObject< CClusPropertyValue > * operator[]( IN int nIndex ) const { return m_cpvvValues[ nIndex ]; }; DWORD CbLength( void ) const { return m_cpvvValues[ 0 ]->CbLength(); }; const CClusPropertyValueVector & ValuesList (void ) const { return m_cpvvValues; }; }; //*** Class CClusPropertyValues #endif // __PROPERTYVALUE_H__