Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995
//
// File: cPropertyEntry.cxx
//
// Contents: PropertyEntry object
//
// History: 11-1-95 krishnag Created.
//
//----------------------------------------------------------------------------
#include "oleds.hxx"
#pragma hdrstop
// Class CPropertyEntry
DEFINE_IDispatch_Implementation(CPropertyEntry)
CPropertyEntry::CPropertyEntry(): _pDispMgr(NULL), _lpName(NULL), _dwValueCount(0), _dwADsType(0), _dwControlCode(0) { ENLIST_TRACKING(CPropertyEntry); }
HRESULT CPropertyEntry::CreatePropertyEntry( REFIID riid, void **ppvObj ) { CPropertyEntry FAR * pPropertyEntry = NULL; HRESULT hr = S_OK;
hr = AllocatePropertyEntryObject(&pPropertyEntry); BAIL_ON_FAILURE(hr);
hr = pPropertyEntry->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pPropertyEntry->Release();
RRETURN(hr);
error: delete pPropertyEntry;
RRETURN_EXP_IF_ERR(hr);
}
CPropertyEntry::~CPropertyEntry( ) { VariantClear(&_propVar);
if (_lpName) { FreeADsStr(_lpName); }
delete _pDispMgr; }
STDMETHODIMP CPropertyEntry::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsPropertyEntry FAR *) this; } else if (IsEqualIID(iid, IID_IADsPropertyEntry)) { *ppv = (IADsPropertyEntry FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsPropertyEntry FAR *) this; } else if (IsEqualIID(iid, IID_ISupportErrorInfo)) { *ppv = (ISupportErrorInfo FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CPropertyEntry::AllocatePropertyEntryObject( CPropertyEntry ** ppPropertyEntry ) { CPropertyEntry FAR * pPropertyEntry = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pPropertyEntry = new CPropertyEntry(); if (pPropertyEntry == NULL) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr);
pDispMgr = new CDispatchMgr; if (pDispMgr == NULL) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr);
hr = LoadTypeInfoEntry( pDispMgr, LIBID_ADs, IID_IADsPropertyEntry, (IADsPropertyEntry *)pPropertyEntry, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pPropertyEntry->_pDispMgr = pDispMgr; *ppPropertyEntry = pPropertyEntry;
RRETURN(hr);
error:
delete pPropertyEntry;
delete pDispMgr;
RRETURN_EXP_IF_ERR(hr);
}
//
// ISupportErrorInfo method
//
STDMETHODIMP CPropertyEntry::InterfaceSupportsErrorInfo(THIS_ REFIID riid) { if (IsEqualIID(riid, IID_IADsPropertyEntry)) { return S_OK; } else { return S_FALSE; } }
STDMETHODIMP CPropertyEntry::get_Values(THIS_ VARIANT FAR * retval) { HRESULT hr; VariantInit(retval); hr = VariantCopy(retval, &_propVar); RRETURN_EXP_IF_ERR(hr);
}
STDMETHODIMP CPropertyEntry::put_Values(THIS_ VARIANT vValues) { HRESULT hr;
// set the values only if it is valid
if ( (V_VT(&vValues) == (VT_ARRAY | VT_VARIANT)) || (V_VT(&vValues) == (VT_EMPTY))) {
hr = VariantCopy(&_propVar, &vValues); RRETURN_EXP_IF_ERR(hr);
} else {
RRETURN(hr=E_ADS_BAD_PARAMETER);
} }
STDMETHODIMP CPropertyEntry::get_ValueCount(THIS_ long FAR * retval) { *retval = _dwValueCount; RRETURN(S_OK); }
STDMETHODIMP CPropertyEntry::put_ValueCount(THIS_ long lnValueCount) {
_dwValueCount = lnValueCount; RRETURN(S_OK); }
STDMETHODIMP CPropertyEntry::get_ADsType(THIS_ long FAR * retval) { *retval = _dwADsType; RRETURN(S_OK); }
STDMETHODIMP CPropertyEntry::put_ADsType(THIS_ long lnADsType) { _dwADsType = lnADsType; RRETURN(S_OK); }
STDMETHODIMP CPropertyEntry::get_ControlCode(THIS_ long FAR * retval) { *retval = _dwControlCode; RRETURN(S_OK); }
STDMETHODIMP CPropertyEntry::put_ControlCode(THIS_ long lnControlCode) { _dwControlCode = lnControlCode; RRETURN(S_OK); }
STDMETHODIMP CPropertyEntry::get_Name(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_lpName, retval); RRETURN_EXP_IF_ERR(hr);
}
STDMETHODIMP CPropertyEntry::put_Name(THIS_ BSTR bstrName) {
if (!bstrName) { RRETURN_EXP_IF_ERR(E_ADS_BAD_PARAMETER); }
if (_lpName) { FreeADsStr(_lpName); }
_lpName = AllocADsStr(bstrName);
if (!_lpName) { RRETURN_EXP_IF_ERR(E_OUTOFMEMORY); }
RRETURN(S_OK);
}
STDMETHODIMP CPropertyEntry::Clear(THIS_ ) { _dwADsType = 0;
_dwControlCode = 0;
_dwValueCount = 0;
VariantClear(&_propVar);
if (_lpName) { FreeADsStr(_lpName); _lpName = NULL; }
RRETURN(S_OK); }
|