288 lines
8.6 KiB
C++
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__
|
|
|