|
|
#include "nds.hxx"
#pragma hdrstop
//////////////////////////////////////////////////////////////////////////
HRESULT ConvertStringArrayToSafeBstrArray( LPWSTR *prgszArray, DWORD dwNumElement, VARIANT *pvarSafeArray ) { HRESULT hr = S_OK; SAFEARRAY *aList = NULL; SAFEARRAYBOUND aBound; CHAR HUGEP *pArray = NULL; long i; BSTR bstrAddress;
if ((!prgszArray) || (!pvarSafeArray)) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
aBound.lLbound = 0; aBound.cElements = dwNumElement; aList = SafeArrayCreate( VT_VARIANT, 1, &aBound );
if ( aList == NULL ) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
for ( i = 0; i < (long)dwNumElement; i++ ) { VARIANT v; VariantInit(&v);
v.vt = VT_BSTR; hr = ADsAllocString( prgszArray[i], &v.bstrVal ); BAIL_ON_FAILURE(hr);
hr = SafeArrayPutElement( aList, &i, &v); BAIL_ON_FAILURE(hr); VariantClear(&v); }
V_VT(pvarSafeArray) = VT_ARRAY | VT_VARIANT; V_ARRAY(pvarSafeArray) = aList;
RRETURN(hr);
error: if ( aList ) { SafeArrayDestroy( aList ); } RRETURN(hr); }
HRESULT ConvertSafeBstrArrayToStringArray( VARIANT varSafeArray, LPWSTR **prgszArray, PDWORD pdwNumElement ) { HRESULT hr = S_OK; DWORD dwSLBound = 0; DWORD dwSUBound = 0; DWORD dwNumVariants = 0; DWORD i = 0; LPWSTR* rgszArray = NULL; SAFEARRAY * pArray = NULL;
if ((!prgszArray ) || (!pdwNumElement)) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
*pdwNumElement = 0; *prgszArray = NULL;
if(!((V_VT(&varSafeArray) & VT_VARIANT) && V_ISARRAY(&varSafeArray))) RRETURN(E_FAIL);
//
// This handles by-ref and regular SafeArrays.
//
if (V_VT(&varSafeArray) & VT_BYREF) pArray = *(V_ARRAYREF(&varSafeArray)); else pArray = V_ARRAY(&varSafeArray);
//
// Check that there is only one dimension in this array
//
if (pArray->cDims != 1) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
//
// Check that there is at least one element in this array
//
if (pArray->rgsabound[0].cElements == 0){ RRETURN(S_OK); // Return success and null array
}
//
// We know that this is a valid single dimension array
//
hr = SafeArrayGetLBound(pArray, 1, (long FAR *)&dwSLBound ); BAIL_ON_FAILURE(hr);
hr = SafeArrayGetUBound(pArray, 1, (long FAR *)&dwSUBound ); BAIL_ON_FAILURE(hr);
dwNumVariants = dwSUBound - dwSLBound + 1; rgszArray = (LPWSTR*)AllocADsMem( sizeof(LPWSTR)*dwNumVariants ); if (!rgszArray) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
if ((V_VT(&varSafeArray) & VT_VARIANT) == VT_BSTR) { BSTR bstrElement; for (i = dwSLBound; i <= dwSUBound; i++) { hr = SafeArrayGetElement(pArray, (long FAR *)&i, &bstrElement ); BAIL_ON_FAILURE(hr);
rgszArray[i-dwSLBound] = AllocADsStr(bstrElement); if (!rgszArray[i-dwSLBound]) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr); } } else { VARIANT varElement; for (i = dwSLBound; i <= dwSUBound; i++) { VariantInit(&varElement); hr = SafeArrayGetElement(pArray, (long FAR *)&i, &varElement ); BAIL_ON_FAILURE(hr);
rgszArray[i-dwSLBound] = AllocADsStr(V_BSTR(&varElement)); if (!rgszArray[i-dwSLBound]) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr); VariantClear(&varElement); } }
*prgszArray = rgszArray; *pdwNumElement = dwNumVariants; RRETURN(hr);
error: if (rgszArray) { FreeADsMem(rgszArray); } RRETURN(hr); }
HRESULT ConvertBinaryArrayToSafeVariantArray( POctetString *prgArray, DWORD dwNumElement, VARIANT *pvarSafeArray ) { HRESULT hr = S_OK; SAFEARRAY *aList = NULL; SAFEARRAYBOUND aBound; CHAR HUGEP *pArray = NULL; long i; VARIANT var;
if ((!prgArray) || (!pvarSafeArray)) { hr = E_FAIL; BAIL_ON_FAILURE(hr); } aBound.lLbound = 0; aBound.cElements = dwNumElement; aList = SafeArrayCreate( VT_VARIANT, 1, &aBound );
if ( aList == NULL ) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
for ( i = 0; i < (long)dwNumElement; i++ ) { hr = BinaryToVariant( (prgArray[i])->Length, (prgArray[i])->Value, &var); BAIL_ON_FAILURE(hr); hr = SafeArrayPutElement( aList, &i, &var); BAIL_ON_FAILURE(hr); }
V_VT(pvarSafeArray) = VT_ARRAY | VT_VARIANT; V_ARRAY(pvarSafeArray) = aList;
RRETURN(hr);
error:
if ( aList ) SafeArrayDestroy( aList );
RRETURN(hr); }
HRESULT ConvertSafeVariantArrayToBinaryArray( VARIANT varSafeArray, POctetString **prgArray, PDWORD pdwNumElement ) { HRESULT hr = S_OK; DWORD dwSLBound = 0; DWORD dwSUBound = 0; LONG cIterations = 0; DWORD dwNumVariants = 0; DWORD i = 0; POctetString *rgArray = NULL; SAFEARRAY * pArray = NULL; VARIANT var;
if ((!prgArray ) || (!pdwNumElement)) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
*pdwNumElement = 0; *prgArray = NULL;
if(!((V_VT(&varSafeArray) & VT_VARIANT) && V_ISARRAY(&varSafeArray))) RRETURN(E_FAIL);
//
// This handles by-ref and regular SafeArrays.
//
if (V_VT(&varSafeArray) & VT_BYREF) pArray = *(V_ARRAYREF(&varSafeArray)); else pArray = V_ARRAY(&varSafeArray);
//
// Check that there is only one dimension in this array
//
if (pArray->cDims != 1) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
//
// Check that there is at least one element in this array
//
if (pArray->rgsabound[0].cElements == 0){ RRETURN(S_OK); // Return success and null array
}
//
// We know that this is a valid single dimension array
//
hr = SafeArrayGetLBound(pArray, 1, (long FAR *)&dwSLBound ); BAIL_ON_FAILURE(hr);
hr = SafeArrayGetUBound(pArray, 1, (long FAR *)&dwSUBound ); BAIL_ON_FAILURE(hr);
dwNumVariants = dwSUBound - dwSLBound + 1; rgArray = (POctetString*)AllocADsMem( sizeof(POctetString)*dwNumVariants ); if (!rgArray) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
for (i = dwSLBound; i <= dwSUBound; i++) {
rgArray[i-dwSLBound] = (POctetString)AllocADsMem(sizeof(OctetString)); if (!rgArray[i-dwSLBound]) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); } rgArray[i-dwSLBound]->Value = NULL; cIterations++; VariantInit(&var); hr = SafeArrayGetElement(pArray, (long FAR *)&i, &var ); BAIL_ON_FAILURE(hr); hr = VariantToBinary( &var, &(rgArray[i-dwSLBound]->Length), &(rgArray[i-dwSLBound]->Value)); BAIL_ON_FAILURE(hr); }
*prgArray = rgArray; *pdwNumElement = dwNumVariants; RRETURN(hr); error: if (rgArray) {
for (i = dwSLBound; i < dwSLBound + cIterations; i++) { if (rgArray[i-dwSLBound]) {
if (rgArray[i-dwSLBound]->Value) FreeADsMem(rgArray[i-dwSLBound]->Value);
FreeADsMem(rgArray[i-dwSLBound]); } }
FreeADsMem(rgArray); } RRETURN(hr); } DEFINE_IDispatch_Implementation(CCaseIgnoreList)
CCaseIgnoreList::CCaseIgnoreList(): _pDispMgr(NULL), _rgszCaseIgnoreList(NULL), _dwNumElement(0) { ENLIST_TRACKING(CCaseIgnoreList); }
HRESULT CCaseIgnoreList::CreateCaseIgnoreList( REFIID riid, void **ppvObj ) { CCaseIgnoreList FAR * pCaseIgnoreList = NULL; HRESULT hr = S_OK;
hr = AllocateCaseIgnoreListObject(&pCaseIgnoreList); BAIL_ON_FAILURE(hr);
hr = pCaseIgnoreList->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pCaseIgnoreList->Release();
RRETURN(hr);
error: delete pCaseIgnoreList;
RRETURN(hr);
}
CCaseIgnoreList::~CCaseIgnoreList( ) { delete _pDispMgr; if (_rgszCaseIgnoreList) { long i; for (i=0;i<(long)_dwNumElement;i++) { if (_rgszCaseIgnoreList[i]) { FreeADsStr(_rgszCaseIgnoreList[i]); } } FreeADsMem(_rgszCaseIgnoreList); } }
STDMETHODIMP CCaseIgnoreList::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsCaseIgnoreList FAR *) this; } else if (IsEqualIID(iid, IID_IADsCaseIgnoreList)) { *ppv = (IADsCaseIgnoreList FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsCaseIgnoreList FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CCaseIgnoreList::AllocateCaseIgnoreListObject( CCaseIgnoreList ** ppCaseIgnoreList ) { CCaseIgnoreList FAR * pCaseIgnoreList = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pCaseIgnoreList = new CCaseIgnoreList(); if (pCaseIgnoreList == 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_IADsCaseIgnoreList, (IADsCaseIgnoreList *)pCaseIgnoreList, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pCaseIgnoreList->_pDispMgr = pDispMgr; *ppCaseIgnoreList = pCaseIgnoreList;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CCaseIgnoreList::get_CaseIgnoreList(THIS_ VARIANT FAR * pVarDestObject) { HRESULT hr = S_OK; hr = ConvertStringArrayToSafeBstrArray( _rgszCaseIgnoreList, _dwNumElement, pVarDestObject); RRETURN(hr); }
STDMETHODIMP CCaseIgnoreList::put_CaseIgnoreList(THIS_ VARIANT VarSrcObject) { HRESULT hr = S_OK; if (_rgszCaseIgnoreList) { long i; for (i=0;i<(long)_dwNumElement;i++) { if (_rgszCaseIgnoreList[i]) { FreeADsStr(_rgszCaseIgnoreList[i]); } } FreeADsMem(_rgszCaseIgnoreList); _rgszCaseIgnoreList = NULL; _dwNumElement = 0; } hr = ConvertSafeBstrArrayToStringArray( VarSrcObject, &_rgszCaseIgnoreList, &_dwNumElement); RRETURN(hr); }
DEFINE_IDispatch_Implementation(CFaxNumber)
CFaxNumber::CFaxNumber(): _pDispMgr(NULL), _szTelephoneNumber(NULL), _NumberOfBits(0), _Parameters(NULL) { ENLIST_TRACKING(CFaxNumber); }
HRESULT CFaxNumber::CreateFaxNumber( REFIID riid, void **ppvObj ) { CFaxNumber FAR * pFaxNumber = NULL; HRESULT hr = S_OK;
hr = AllocateFaxNumberObject(&pFaxNumber); BAIL_ON_FAILURE(hr);
hr = pFaxNumber->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pFaxNumber->Release();
RRETURN(hr);
error: delete pFaxNumber;
RRETURN(hr);
}
CFaxNumber::~CFaxNumber( ) { delete _pDispMgr; if (_szTelephoneNumber) { FreeADsStr(_szTelephoneNumber); } if (_Parameters) { FreeADsMem(_Parameters); } }
STDMETHODIMP CFaxNumber::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsFaxNumber FAR *) this; } else if (IsEqualIID(iid, IID_IADsFaxNumber)) { *ppv = (IADsFaxNumber FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsFaxNumber FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CFaxNumber::AllocateFaxNumberObject( CFaxNumber ** ppFaxNumber ) { CFaxNumber FAR * pFaxNumber = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pFaxNumber = new CFaxNumber(); if (pFaxNumber == 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_IADsFaxNumber, (IADsFaxNumber *)pFaxNumber, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pFaxNumber->_pDispMgr = pDispMgr; *ppFaxNumber = pFaxNumber;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CFaxNumber::get_Parameters(THIS_ VARIANT FAR * pVarDestObject) { HRESULT hr = S_OK; SAFEARRAY *aList = NULL; SAFEARRAYBOUND aBound; CHAR HUGEP *pArray = NULL;
aBound.lLbound = 0; aBound.cElements = _NumberOfBits; aList = SafeArrayCreate( VT_UI1, 1, &aBound );
if ( aList == NULL ) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
hr = SafeArrayAccessData( aList, (void HUGEP * FAR *) &pArray ); BAIL_ON_FAILURE(hr);
memcpy( pArray, _Parameters, aBound.cElements ); SafeArrayUnaccessData( aList );
V_VT(pVarDestObject) = VT_ARRAY | VT_UI1; V_ARRAY(pVarDestObject) = aList;
RRETURN(hr);
error:
if ( aList ) { SafeArrayDestroy( aList ); } RRETURN(hr); }
STDMETHODIMP CFaxNumber::put_Parameters(THIS_ VARIANT VarSrcObject) {
HRESULT hr = S_OK; LONG dwSLBound = 0; LONG dwSUBound = 0; CHAR HUGEP *pArray = NULL; VARIANT *pVarSrcObject = &VarSrcObject;
if (_Parameters) { FreeADsMem(_Parameters); }
if( pVarSrcObject->vt != (VT_ARRAY | VT_UI1)) { RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
hr = SafeArrayGetLBound(V_ARRAY(pVarSrcObject), 1, (long FAR *) &dwSLBound ); BAIL_ON_FAILURE(hr);
hr = SafeArrayGetUBound(V_ARRAY(pVarSrcObject), 1, (long FAR *) &dwSUBound ); BAIL_ON_FAILURE(hr);
_Parameters = (BYTE*) AllocADsMem( dwSUBound - dwSLBound + 1); if ( _Parameters == NULL) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
_NumberOfBits = dwSUBound - dwSLBound + 1;
hr = SafeArrayAccessData( V_ARRAY(pVarSrcObject), (void HUGEP * FAR *) &pArray ); BAIL_ON_FAILURE(hr);
memcpy( _Parameters, pArray, _NumberOfBits);
SafeArrayUnaccessData( V_ARRAY(pVarSrcObject) );
error:
RRETURN(hr); }
STDMETHODIMP CFaxNumber::get_TelephoneNumber(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK; hr = ADsAllocString(_szTelephoneNumber, retval); RRETURN(hr);
}
STDMETHODIMP CFaxNumber::put_TelephoneNumber(THIS_ BSTR bstrTelephoneNumber) { if (_szTelephoneNumber) { FreeADsStr(_szTelephoneNumber); }
_szTelephoneNumber = AllocADsStr(bstrTelephoneNumber);
if (!_szTelephoneNumber) { RRETURN(E_OUTOFMEMORY); } RRETURN(S_OK); }
DEFINE_IDispatch_Implementation(CNetAddress)
CNetAddress::CNetAddress(): _pDispMgr(NULL), _dwAddressType(0), _dwAddressLength(0), _pbAddress(NULL) { ENLIST_TRACKING(CNetAddress); }
HRESULT CNetAddress::CreateNetAddress( REFIID riid, void **ppvObj ) { CNetAddress FAR * pNetAddress = NULL; HRESULT hr = S_OK;
hr = AllocateNetAddressObject(&pNetAddress); BAIL_ON_FAILURE(hr);
hr = pNetAddress->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pNetAddress->Release();
RRETURN(hr);
error: delete pNetAddress;
RRETURN(hr);
}
CNetAddress::~CNetAddress( ) { delete _pDispMgr; if (_pbAddress) { FreeADsMem(_pbAddress); } }
STDMETHODIMP CNetAddress::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsNetAddress FAR *) this; } else if (IsEqualIID(iid, IID_IADsNetAddress)) { *ppv = (IADsNetAddress FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsNetAddress FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CNetAddress::AllocateNetAddressObject( CNetAddress ** ppNetAddress ) { CNetAddress FAR * pNetAddress = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pNetAddress = new CNetAddress(); if (pNetAddress == 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_IADsNetAddress, (IADsNetAddress *)pNetAddress, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pNetAddress->_pDispMgr = pDispMgr; *ppNetAddress = pNetAddress;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CNetAddress::get_AddressType(THIS_ long FAR * retval) { *retval = _dwAddressType; RRETURN(S_OK); }
STDMETHODIMP CNetAddress::put_AddressType(THIS_ long lnAddressType) { _dwAddressType = lnAddressType; RRETURN(S_OK); }
STDMETHODIMP CNetAddress::get_Address(THIS_ VARIANT FAR * pVarDestObject) { HRESULT hr = S_OK; SAFEARRAY *aList = NULL; SAFEARRAYBOUND aBound; CHAR HUGEP *pArray = NULL;
aBound.lLbound = 0; aBound.cElements = _dwAddressLength; aList = SafeArrayCreate( VT_UI1, 1, &aBound );
if ( aList == NULL ) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
hr = SafeArrayAccessData( aList, (void HUGEP * FAR *) &pArray ); BAIL_ON_FAILURE(hr);
memcpy( pArray, _pbAddress, aBound.cElements ); SafeArrayUnaccessData( aList );
V_VT(pVarDestObject) = VT_ARRAY | VT_UI1; V_ARRAY(pVarDestObject) = aList;
RRETURN(hr);
error:
if ( aList ) { SafeArrayDestroy( aList ); } RRETURN(hr); }
STDMETHODIMP CNetAddress::put_Address(THIS_ VARIANT VarSrcObject) { HRESULT hr = S_OK; LONG dwSLBound = 0; LONG dwSUBound = 0; CHAR HUGEP *pArray = NULL; VARIANT *pVarSrcObject = &VarSrcObject;
if (_pbAddress) { FreeADsMem(_pbAddress); }
if( pVarSrcObject->vt != (VT_ARRAY | VT_UI1)) { RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
hr = SafeArrayGetLBound(V_ARRAY(pVarSrcObject), 1, (long FAR *) &dwSLBound ); BAIL_ON_FAILURE(hr);
hr = SafeArrayGetUBound(V_ARRAY(pVarSrcObject), 1, (long FAR *) &dwSUBound ); BAIL_ON_FAILURE(hr);
_pbAddress = (BYTE*) AllocADsMem( dwSUBound - dwSLBound + 1);
if ( _pbAddress == NULL) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); }
_dwAddressLength = dwSUBound - dwSLBound + 1;
hr = SafeArrayAccessData( V_ARRAY(pVarSrcObject), (void HUGEP * FAR *) &pArray ); BAIL_ON_FAILURE(hr);
memcpy( _pbAddress, pArray, _dwAddressLength ); SafeArrayUnaccessData( V_ARRAY(pVarSrcObject) ); error: RRETURN(hr); }
DEFINE_IDispatch_Implementation(COctetList)
COctetList::COctetList(): _pDispMgr(NULL), _rgOctetList(NULL) { ENLIST_TRACKING(COctetList); }
HRESULT COctetList::CreateOctetList( REFIID riid, void **ppvObj ) { COctetList FAR * pOctetList = NULL; HRESULT hr = S_OK;
hr = AllocateOctetListObject(&pOctetList); BAIL_ON_FAILURE(hr);
hr = pOctetList->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pOctetList->Release();
RRETURN(hr);
error: delete pOctetList;
RRETURN(hr);
}
COctetList::~COctetList( ) { delete _pDispMgr; if (_rgOctetList) { long i; for (i=0;i<(long)_dwNumElement;i++) { if (_rgOctetList[i]) { FreeADsMem(_rgOctetList[i]); } } FreeADsMem(_rgOctetList); } }
STDMETHODIMP COctetList::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsOctetList FAR *) this; } else if (IsEqualIID(iid, IID_IADsOctetList)) { *ppv = (IADsOctetList FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsOctetList FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT COctetList::AllocateOctetListObject( COctetList ** ppOctetList ) { COctetList FAR * pOctetList = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pOctetList = new COctetList(); if (pOctetList == 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_IADsOctetList, (IADsOctetList *)pOctetList, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pOctetList->_pDispMgr = pDispMgr; *ppOctetList = pOctetList;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP COctetList::get_OctetList(THIS_ VARIANT FAR * pVarDestObject) { HRESULT hr = S_OK; hr = ConvertBinaryArrayToSafeVariantArray( _rgOctetList, _dwNumElement, pVarDestObject); RRETURN(hr); }
STDMETHODIMP COctetList::put_OctetList(THIS_ VARIANT VarSrcObject) { HRESULT hr = S_OK; if (_rgOctetList) { long i; for (i=0;i<(long)_dwNumElement;i++) { if (_rgOctetList[i]) { FreeADsMem(_rgOctetList[i]); } } FreeADsMem(_rgOctetList); } hr = ConvertSafeVariantArrayToBinaryArray( VarSrcObject, &_rgOctetList, &_dwNumElement); RRETURN(hr); }
DEFINE_IDispatch_Implementation(CEmail)
CEmail::CEmail(): _pDispMgr(NULL), _szAddress(NULL), _dwType(0) { ENLIST_TRACKING(CEmail); }
HRESULT CEmail::CreateEmail( REFIID riid, void **ppvObj ) { CEmail FAR * pEmail = NULL; HRESULT hr = S_OK;
hr = AllocateEmailObject(&pEmail); BAIL_ON_FAILURE(hr);
hr = pEmail->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pEmail->Release();
RRETURN(hr);
error: delete pEmail;
RRETURN(hr);
}
CEmail::~CEmail( ) { delete _pDispMgr; if (_szAddress) { FreeADsStr(_szAddress); } }
STDMETHODIMP CEmail::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsEmail FAR *) this; } else if (IsEqualIID(iid, IID_IADsEmail)) { *ppv = (IADsEmail FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsEmail FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CEmail::AllocateEmailObject( CEmail ** ppEmail ) { CEmail FAR * pEmail = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pEmail = new CEmail(); if (pEmail == 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_IADsEmail, (IADsEmail *)pEmail, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pEmail->_pDispMgr = pDispMgr; *ppEmail = pEmail;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CEmail::get_Address(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_szAddress, retval); RRETURN(hr);
}
STDMETHODIMP CEmail::put_Address(THIS_ BSTR bstrAddress) { if (!bstrAddress) { RRETURN(E_FAIL); }
if (_szAddress) { FreeADsStr(_szAddress); }
_szAddress = AllocADsStr(bstrAddress); if (!_szAddress) { RRETURN(E_OUTOFMEMORY); }
RRETURN(S_OK);
}
STDMETHODIMP CEmail::get_Type(THIS_ long FAR * retval) { *retval = _dwType; RRETURN(S_OK); }
STDMETHODIMP CEmail::put_Type(THIS_ long lnType) { _dwType = lnType; RRETURN(S_OK); }
DEFINE_IDispatch_Implementation(CPath)
CPath::CPath(): _pDispMgr(NULL), _dwType(0), _lpVolumeName(NULL), _lpPath(NULL) { ENLIST_TRACKING(CPath); }
HRESULT CPath::CreatePath( REFIID riid, void **ppvObj ) { CPath FAR * pPath = NULL; HRESULT hr = S_OK;
hr = AllocatePathObject(&pPath); BAIL_ON_FAILURE(hr);
hr = pPath->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pPath->Release();
RRETURN(hr);
error: delete pPath;
RRETURN(hr);
}
CPath::~CPath( ) { delete _pDispMgr; if (_lpVolumeName) { FreeADsStr(_lpVolumeName); } if (_lpPath) { FreeADsStr(_lpPath); } }
STDMETHODIMP CPath::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsPath FAR *) this; } else if (IsEqualIID(iid, IID_IADsPath)) { *ppv = (IADsPath FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsPath FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CPath::AllocatePathObject( CPath ** ppPath ) { CPath FAR * pPath = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pPath = new CPath(); if (pPath == 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_IADsPath, (IADsPath *)pPath, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pPath->_pDispMgr = pDispMgr; *ppPath = pPath;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CPath::get_Type(THIS_ long FAR * retval) { *retval = _dwType; RRETURN(S_OK); }
STDMETHODIMP CPath::put_Type(THIS_ long lnType) { _dwType = lnType; RRETURN(S_OK); }
STDMETHODIMP CPath::get_VolumeName(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_lpVolumeName, retval); RRETURN(hr);
}
STDMETHODIMP CPath::put_VolumeName(THIS_ BSTR bstrVolumeName) {
if (!bstrVolumeName) { RRETURN(E_FAIL); }
if (_lpVolumeName) { FreeADsStr(_lpVolumeName); }
_lpVolumeName= AllocADsStr(bstrVolumeName);
if (!_lpVolumeName) { RRETURN(E_OUTOFMEMORY); }
RRETURN(S_OK);
}
STDMETHODIMP CPath::get_Path(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_lpPath, retval); RRETURN(hr);
}
STDMETHODIMP CPath::put_Path(THIS_ BSTR bstrPath) { if (!bstrPath) { RRETURN(E_FAIL); }
if (_lpPath) { FreeADsStr(_lpPath); }
_lpPath= AllocADsStr(bstrPath);
if (!_lpPath) { RRETURN(E_OUTOFMEMORY); }
RRETURN(S_OK); }
//////////////////////////////////////////////////////////////////////////
DEFINE_IDispatch_Implementation(CReplicaPointer)
CReplicaPointer::CReplicaPointer(): _pDispMgr(NULL), _lpServerName(NULL), _dwReplicaType(0), _dwReplicaNumber(0), _dwCount(0) { ENLIST_TRACKING(CReplicaPointer); _ReplicaAddressHints.AddressType = 0; _ReplicaAddressHints.AddressLength = 0; _ReplicaAddressHints.Address = NULL; }
HRESULT CReplicaPointer::CreateReplicaPointer( REFIID riid, void **ppvObj ) { CReplicaPointer FAR * pReplicaPointer = NULL; HRESULT hr = S_OK;
hr = AllocateReplicaPointerObject(&pReplicaPointer); BAIL_ON_FAILURE(hr);
hr = pReplicaPointer->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pReplicaPointer->Release();
RRETURN(hr);
error: delete pReplicaPointer;
RRETURN(hr); }
CReplicaPointer::~CReplicaPointer( ) { delete _pDispMgr; if (_lpServerName) { FreeADsStr(_lpServerName); } if (_ReplicaAddressHints.Address) { FreeADsMem(_ReplicaAddressHints.Address); } }
STDMETHODIMP CReplicaPointer::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsReplicaPointer FAR *) this; } else if (IsEqualIID(iid, IID_IADsReplicaPointer)) { *ppv = (IADsReplicaPointer FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsReplicaPointer FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CReplicaPointer::AllocateReplicaPointerObject( CReplicaPointer ** ppReplicaPointer ) { CReplicaPointer FAR * pReplicaPointer = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pReplicaPointer = new CReplicaPointer(); if (pReplicaPointer == 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_IADsReplicaPointer, (IADsReplicaPointer *)pReplicaPointer, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pReplicaPointer->_pDispMgr = pDispMgr; *ppReplicaPointer = pReplicaPointer;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CReplicaPointer::get_ReplicaType(THIS_ long FAR * retval) { *retval = _dwReplicaType; RRETURN(S_OK); }
STDMETHODIMP CReplicaPointer::put_ReplicaType(THIS_ long lnReplicaType) { _dwReplicaType = lnReplicaType; RRETURN(S_OK); }
STDMETHODIMP CReplicaPointer::get_ReplicaNumber(THIS_ long FAR * retval) { *retval = _dwReplicaNumber; RRETURN(S_OK); }
STDMETHODIMP CReplicaPointer::put_ReplicaNumber(THIS_ long lnReplicaNumber) { _dwReplicaNumber = lnReplicaNumber; RRETURN(S_OK); }
STDMETHODIMP CReplicaPointer::get_Count(THIS_ long FAR * retval) { *retval = _dwCount; RRETURN(S_OK); }
STDMETHODIMP CReplicaPointer::put_Count(THIS_ long lnCount) {
_dwCount = lnCount; RRETURN(S_OK); }
STDMETHODIMP CReplicaPointer::get_ServerName(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_lpServerName, retval); RRETURN(hr);
}
STDMETHODIMP CReplicaPointer::put_ServerName(THIS_ BSTR bstrServerName) {
if (!bstrServerName) { RRETURN(E_FAIL); }
if (_lpServerName) { FreeADsStr(_lpServerName); }
_lpServerName= AllocADsStr(bstrServerName);
if (!_lpServerName) { RRETURN(E_OUTOFMEMORY); }
RRETURN(S_OK);
}
STDMETHODIMP CReplicaPointer::get_ReplicaAddressHints(THIS_ VARIANT* pValAddress) { HRESULT hr = S_OK; NDSOBJECT object;
memcpy(&object.NdsValue.value_12, &_ReplicaAddressHints, sizeof(NDS_ASN1_TYPE_12));
hr = NdsTypeToVarTypeCopyNDSSynId12( &object, pValAddress ); RRETURN(hr); }
STDMETHODIMP CReplicaPointer::put_ReplicaAddressHints(THIS_ VARIANT ValAddress) { HRESULT hr; NDSOBJECT object;
if (_ReplicaAddressHints.Address) { FreeADsMem(_ReplicaAddressHints.Address); }
hr = VarTypeToNdsTypeCopyNDSSynId12( &ValAddress, &object ); BAIL_ON_FAILURE(hr); memcpy(&_ReplicaAddressHints, &object.NdsValue.value_12, sizeof(NDS_ASN1_TYPE_12)); error: RRETURN(hr); }
DEFINE_IDispatch_Implementation(CTimestamp)
CTimestamp::CTimestamp(): _pDispMgr(NULL), _dwWholeSeconds(0), _dwEventID(0) { ENLIST_TRACKING(CTimestamp); }
HRESULT CTimestamp::CreateTimestamp( REFIID riid, void **ppvObj ) { CTimestamp FAR * pTime = NULL; HRESULT hr = S_OK;
hr = AllocateTimestampObject(&pTime); BAIL_ON_FAILURE(hr);
hr = pTime->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pTime->Release();
RRETURN(hr);
error: delete pTime;
RRETURN(hr);
}
CTimestamp::~CTimestamp( ) { delete _pDispMgr; }
STDMETHODIMP CTimestamp::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsTimestamp FAR *) this; } else if (IsEqualIID(iid, IID_IADsTimestamp)) { *ppv = (IADsTimestamp FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsTimestamp FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CTimestamp::AllocateTimestampObject( CTimestamp ** ppTime ) { CTimestamp FAR * pTime = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pTime = new CTimestamp(); if (pTime == 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_IADsTimestamp, (IADsTimestamp *)pTime, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pTime->_pDispMgr = pDispMgr; *ppTime = pTime;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CTimestamp::get_WholeSeconds(THIS_ long FAR * retval) { *retval = _dwWholeSeconds; RRETURN(S_OK); }
STDMETHODIMP CTimestamp::put_WholeSeconds(THIS_ long lnWholeSeconds) { _dwWholeSeconds = lnWholeSeconds; RRETURN(S_OK); }
STDMETHODIMP CTimestamp::get_EventID(THIS_ long FAR * retval) { *retval = _dwEventID; RRETURN(S_OK); }
STDMETHODIMP CTimestamp::put_EventID(THIS_ long lnEventID) { _dwEventID = lnEventID; RRETURN(S_OK); }
DEFINE_IDispatch_Implementation(CPostalAddress)
CPostalAddress::CPostalAddress(): _pDispMgr(NULL), _rgszPostalAddress(NULL), _dwNumElement(0) { ENLIST_TRACKING(CPostalAddress); }
HRESULT CPostalAddress::CreatePostalAddress( REFIID riid, void **ppvObj ) { CPostalAddress FAR * pPostalAddress = NULL; HRESULT hr = S_OK;
hr = AllocatePostalAddressObject(&pPostalAddress); BAIL_ON_FAILURE(hr);
hr = pPostalAddress->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pPostalAddress->Release();
RRETURN(hr);
error: delete pPostalAddress;
RRETURN(hr);
}
CPostalAddress::~CPostalAddress( ) { delete _pDispMgr; if (_rgszPostalAddress) { long i; for (i=0;i<(long)_dwNumElement;i++) { if (_rgszPostalAddress[i]) { FreeADsStr(_rgszPostalAddress[i]); } } FreeADsMem(_rgszPostalAddress); } }
STDMETHODIMP CPostalAddress::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsPostalAddress FAR *) this; } else if (IsEqualIID(iid, IID_IADsPostalAddress)) { *ppv = (IADsPostalAddress FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsPostalAddress FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CPostalAddress::AllocatePostalAddressObject( CPostalAddress ** ppPostalAddress ) { CPostalAddress FAR * pPostalAddress = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pPostalAddress = new CPostalAddress(); if (pPostalAddress == 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_IADsPostalAddress, (IADsPostalAddress *)pPostalAddress, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pPostalAddress->_pDispMgr = pDispMgr; *ppPostalAddress = pPostalAddress;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CPostalAddress::get_PostalAddress(THIS_ VARIANT FAR * pVarDestObject) { HRESULT hr = S_OK; hr = ConvertStringArrayToSafeBstrArray( _rgszPostalAddress, _dwNumElement, pVarDestObject); RRETURN(hr); }
STDMETHODIMP CPostalAddress::put_PostalAddress(THIS_ VARIANT VarSrcObject) { HRESULT hr = S_OK; SAFEARRAY * pArray = NULL;
if (_rgszPostalAddress) { long i; for (i=0;i<(long)_dwNumElement;i++) { if (_rgszPostalAddress[i]) { FreeADsStr(_rgszPostalAddress[i]); } } FreeADsMem(_rgszPostalAddress); }
//
// Make sure it has 6 elements
//
if(!((V_VT(&VarSrcObject) & VT_VARIANT) && V_ISARRAY(&VarSrcObject))) RRETURN(E_FAIL);
if (V_VT(&VarSrcObject) & VT_BYREF) pArray = *(V_ARRAYREF(&VarSrcObject)); else pArray = V_ARRAY(&VarSrcObject);
if ((pArray->rgsabound[0].cElements > 6) || (pArray->rgsabound[0].cElements <= 0)){ RRETURN(E_FAIL); }
hr = ConvertSafeBstrArrayToStringArray( VarSrcObject, &_rgszPostalAddress, &_dwNumElement); RRETURN(hr); }
//////////////////////////////////////////////////////////////////////////
DEFINE_IDispatch_Implementation(CBackLink)
CBackLink::CBackLink(): _pDispMgr(NULL), _lpObjectName(NULL), _dwRemoteID(0) { ENLIST_TRACKING(CBackLink); }
HRESULT CBackLink::CreateBackLink( REFIID riid, void **ppvObj ) { CBackLink FAR * pBackLink = NULL; HRESULT hr = S_OK;
hr = AllocateBackLinkObject(&pBackLink); BAIL_ON_FAILURE(hr);
hr = pBackLink->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pBackLink->Release();
RRETURN(hr);
error: delete pBackLink;
RRETURN(hr);
}
CBackLink::~CBackLink( ) { delete _pDispMgr; if (_lpObjectName) { FreeADsStr(_lpObjectName); } }
STDMETHODIMP CBackLink::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsBackLink FAR *) this; } else if (IsEqualIID(iid, IID_IADsBackLink)) { *ppv = (IADsBackLink FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsBackLink FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CBackLink::AllocateBackLinkObject( CBackLink ** ppBackLink ) { CBackLink FAR * pBackLink = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pBackLink = new CBackLink(); if (pBackLink == 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_IADsBackLink, (IADsBackLink *)pBackLink, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pBackLink->_pDispMgr = pDispMgr; *ppBackLink = pBackLink;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CBackLink::get_RemoteID(THIS_ long FAR * retval) { *retval = _dwRemoteID; RRETURN(S_OK); }
STDMETHODIMP CBackLink::put_RemoteID(THIS_ long lnRemoteID) { _dwRemoteID = lnRemoteID; RRETURN(S_OK); }
STDMETHODIMP CBackLink::get_ObjectName(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_lpObjectName, retval); RRETURN(hr);
}
STDMETHODIMP CBackLink::put_ObjectName(THIS_ BSTR bstrObjectName) {
if (!bstrObjectName) { RRETURN(E_FAIL); }
if (_lpObjectName) { FreeADsStr(_lpObjectName); }
_lpObjectName= AllocADsStr(bstrObjectName);
if (!_lpObjectName) { RRETURN(E_OUTOFMEMORY); }
RRETURN(S_OK);
}
//////////////////////////////////////////////////////////////////////////
DEFINE_IDispatch_Implementation(CTypedName)
CTypedName::CTypedName(): _pDispMgr(NULL), _lpObjectName(NULL), _dwLevel(0), _dwInterval(0) { ENLIST_TRACKING(CTypedName); }
HRESULT CTypedName::CreateTypedName( REFIID riid, void **ppvObj ) { CTypedName FAR * pTypedName = NULL; HRESULT hr = S_OK;
hr = AllocateTypedNameObject(&pTypedName); BAIL_ON_FAILURE(hr);
hr = pTypedName->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pTypedName->Release();
RRETURN(hr);
error: delete pTypedName;
RRETURN(hr);
}
CTypedName::~CTypedName( ) { delete _pDispMgr; if (_lpObjectName) { FreeADsStr(_lpObjectName); } }
STDMETHODIMP CTypedName::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsTypedName FAR *) this; } else if (IsEqualIID(iid, IID_IADsTypedName)) { *ppv = (IADsTypedName FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsTypedName FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CTypedName::AllocateTypedNameObject( CTypedName ** ppTypedName ) { CTypedName FAR * pTypedName = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pTypedName = new CTypedName(); if (pTypedName == 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_IADsTypedName, (IADsTypedName *)pTypedName, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pTypedName->_pDispMgr = pDispMgr; *ppTypedName = pTypedName;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CTypedName::get_Interval(THIS_ long FAR * retval) { *retval = _dwInterval; RRETURN(S_OK); }
STDMETHODIMP CTypedName::put_Interval(THIS_ long lnInterval) { _dwInterval = lnInterval; RRETURN(S_OK); }
STDMETHODIMP CTypedName::get_Level(THIS_ long FAR * retval) { *retval = _dwLevel; RRETURN(S_OK); }
STDMETHODIMP CTypedName::put_Level(THIS_ long lnLevel) { _dwLevel = lnLevel; RRETURN(S_OK); }
STDMETHODIMP CTypedName::get_ObjectName(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_lpObjectName, retval); RRETURN(hr);
}
STDMETHODIMP CTypedName::put_ObjectName(THIS_ BSTR bstrObjectName) {
if (!bstrObjectName) { RRETURN(E_FAIL); }
if (_lpObjectName) { FreeADsStr(_lpObjectName); }
_lpObjectName= AllocADsStr(bstrObjectName);
if (!_lpObjectName) { RRETURN(E_OUTOFMEMORY); }
RRETURN(S_OK);
}
DEFINE_IDispatch_Implementation(CHold)
CHold::CHold(): _pDispMgr(NULL), _lpObjectName(NULL), _dwAmount(0) { ENLIST_TRACKING(CHold); }
HRESULT CHold::CreateHold( REFIID riid, void **ppvObj ) { CHold FAR * pHold = NULL; HRESULT hr = S_OK;
hr = AllocateHoldObject(&pHold); BAIL_ON_FAILURE(hr);
hr = pHold->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pHold->Release();
RRETURN(hr);
error: delete pHold;
RRETURN(hr);
}
CHold::~CHold( ) { delete _pDispMgr; if (_lpObjectName) { FreeADsStr(_lpObjectName); } }
STDMETHODIMP CHold::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsHold FAR *) this; } else if (IsEqualIID(iid, IID_IADsHold)) { *ppv = (IADsHold FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsHold FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
HRESULT CHold::AllocateHoldObject( CHold ** ppHold ) { CHold FAR * pHold = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pHold = new CHold(); if (pHold == 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_IADsHold, (IADsHold *)pHold, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
pHold->_pDispMgr = pDispMgr; *ppHold = pHold;
RRETURN(hr);
error:
delete pDispMgr;
RRETURN(hr);
}
STDMETHODIMP CHold::get_Amount(THIS_ long FAR * retval) { *retval = _dwAmount; RRETURN(S_OK); }
STDMETHODIMP CHold::put_Amount(THIS_ long lnAmount) { _dwAmount = lnAmount; RRETURN(S_OK); }
STDMETHODIMP CHold::get_ObjectName(THIS_ BSTR FAR * retval) { HRESULT hr = S_OK;
hr = ADsAllocString(_lpObjectName, retval); RRETURN(hr);
}
STDMETHODIMP CHold::put_ObjectName(THIS_ BSTR bstrObjectName) { if (!bstrObjectName) { RRETURN(E_FAIL); }
if (_lpObjectName) { FreeADsStr(_lpObjectName); }
_lpObjectName= AllocADsStr(bstrObjectName);
if (!_lpObjectName) { RRETURN(E_OUTOFMEMORY); }
RRETURN(S_OK); }
|