windows-nt/Source/XPSP1/NT/base/cluster/admin/msclus/propertyvalue.h
2020-09-26 16:20:57 +08:00

288 lines
8.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////
//
// 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 <PropList.h>
#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__