//--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1999 // // File: CDNWithString.cxx // // Contents: DNWithString object // // History: 4-23-99 AjayR Created. // //---------------------------------------------------------------------------- #include "oleds.hxx" #pragma hdrstop // Class CDNWithString DEFINE_IDispatch_Implementation(CDNWithString) CDNWithString::CDNWithString(): _pszStrVal(NULL), _pszDNStr(NULL) { ENLIST_TRACKING(CDNWithString); } HRESULT CDNWithString::CreateDNWithString( REFIID riid, void **ppvObj ) { CDNWithString FAR * pDNWithString = NULL; HRESULT hr = S_OK; hr = AllocateDNWithStringObject(&pDNWithString); BAIL_ON_FAILURE(hr); hr = pDNWithString->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr); pDNWithString->Release(); RRETURN(hr); error: delete pDNWithString; RRETURN_EXP_IF_ERR(hr); } CDNWithString::~CDNWithString( ) { delete _pDispMgr; if (_pszStrVal) { FreeADsStr(_pszStrVal); } if (_pszDNStr) { FreeADsStr(_pszDNStr); } } STDMETHODIMP CDNWithString::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsDNWithString FAR *) this; } else if (IsEqualIID(iid, IID_IADsDNWithString)) { *ppv = (IADsDNWithString FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsDNWithString FAR *) this; } else if (IsEqualIID(iid, IID_ISupportErrorInfo)) { *ppv = (ISupportErrorInfo FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; } HRESULT CDNWithString::AllocateDNWithStringObject( CDNWithString ** ppDNWithString ) { CDNWithString FAR * pDNWithString = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK; pDNWithString = new CDNWithString(); if (pDNWithString == 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_IADsDNWithString, (IADsDNWithString *)pDNWithString, DISPID_REGULAR ); BAIL_ON_FAILURE(hr); pDNWithString->_pDispMgr = pDispMgr; *ppDNWithString = pDNWithString; RRETURN(hr); error: delete pDNWithString; delete pDispMgr; RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CDNWithString::InterfaceSupportsErrorInfo(THIS_ REFIID riid) { if (IsEqualIID(riid, IID_IADsDNWithString)) { return S_OK; } else { return S_FALSE; } } // // Methods to get and put the string part. // STDMETHODIMP CDNWithString::get_StringValue(THIS_ BSTR FAR* pbstrValue) { HRESULT hr = S_OK; if (FAILED(hr = ValidateOutParameter(pbstrValue))){ RRETURN_EXP_IF_ERR(hr); } hr = ADsAllocString(_pszStrVal, pbstrValue); RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CDNWithString::put_StringValue(THIS_ BSTR bstrValue) { HRESULT hr = S_OK; if (_pszStrVal) { FreeADsStr(_pszStrVal); _pszStrVal = NULL; } _pszStrVal = AllocADsStr(bstrValue); if (bstrValue && !_pszStrVal) { hr = E_OUTOFMEMORY; } RRETURN(hr); } // // Methods to get and put the DN string. // STDMETHODIMP CDNWithString::get_DNString(THIS_ BSTR FAR* pbstrDNString) { HRESULT hr = S_OK; if (FAILED(hr = ValidateOutParameter(pbstrDNString))){ RRETURN_EXP_IF_ERR(hr); } hr = ADsAllocString(_pszDNStr, pbstrDNString); RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CDNWithString::put_DNString(THIS_ BSTR bstrDNString) { HRESULT hr = S_OK; if (_pszDNStr) { FreeADsStr(_pszDNStr); _pszDNStr = NULL; } _pszDNStr = AllocADsStr(bstrDNString); if (bstrDNString && !_pszDNStr) { hr = E_OUTOFMEMORY; } RRETURN(hr); }