372 lines
7.6 KiB
C++
372 lines
7.6 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) 1996-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
OLEWRAP.CPP
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Wrapper classes for COM data type functions.
|
||
|
|
||
|
If a COM data function is required to allocate memory and fails to do
|
||
|
so, then a CX_MemoryException exception is thrown. All COM data type
|
||
|
functions are wrapped, regardless if they allocate memory, for the sake
|
||
|
of completeness.
|
||
|
|
||
|
History:
|
||
|
|
||
|
a-dcrews 19-Mar-99 Created.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
#include <corex.h>
|
||
|
#include <oleauto.h>
|
||
|
|
||
|
#include "OleWrap.h"
|
||
|
#include "genutils.h"
|
||
|
|
||
|
//***************************************************************************
|
||
|
//
|
||
|
// SafeArray wrappers
|
||
|
//
|
||
|
//***************************************************************************
|
||
|
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayAccessData(SAFEARRAY FAR* psa, void HUGEP* FAR* ppvData)
|
||
|
{
|
||
|
return SafeArrayAccessData(psa, ppvData);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayAllocData(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
HRESULT hRes = S_OK;
|
||
|
|
||
|
hRes = SafeArrayAllocData(psa);
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayAllocDescriptor(unsigned int cDims, SAFEARRAY FAR* FAR* ppsaOut)
|
||
|
{
|
||
|
HRESULT hRes = S_OK;
|
||
|
|
||
|
hRes = SafeArrayAllocDescriptor(cDims, ppsaOut);
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayCopy(SAFEARRAY FAR* psa, SAFEARRAY FAR* FAR* ppsaOut)
|
||
|
{
|
||
|
HRESULT hRes = S_OK;
|
||
|
|
||
|
hRes = SafeArrayCopy(psa, ppsaOut);
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayCopyData(SAFEARRAY FAR* psaSource, SAFEARRAY FAR* psaTarget)
|
||
|
{
|
||
|
HRESULT hRes = S_OK;
|
||
|
|
||
|
hRes = SafeArrayCopyData(psaSource, psaTarget);
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
SAFEARRAY* COleAuto::_SafeArrayCreate(VARTYPE vt, unsigned int cDims, SAFEARRAYBOUND FAR* rgsabound)
|
||
|
{
|
||
|
SAFEARRAY* psa;
|
||
|
|
||
|
psa = SafeArrayCreate(vt, cDims, rgsabound);
|
||
|
if (NULL == psa)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return psa;
|
||
|
}
|
||
|
|
||
|
SAFEARRAY* COleAuto::_SafeArrayCreateVector(VARTYPE vt, long lLbound, unsigned int cElements)
|
||
|
{
|
||
|
SAFEARRAY* psa;
|
||
|
|
||
|
psa = SafeArrayCreateVector(vt, lLbound, cElements);
|
||
|
if (NULL == psa)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return psa;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayDestroy(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayDestroy(psa);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayDestroyData(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayDestroyData(psa);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayDestroyDescriptor(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayDestroyDescriptor(psa);
|
||
|
}
|
||
|
|
||
|
UINT COleAuto::_SafeArrayGetDim(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayGetDim(psa);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayGetElement(SAFEARRAY FAR* psa, long FAR* rgIndices, void FAR* pv)
|
||
|
{
|
||
|
return SafeArrayGetElement(psa, rgIndices, pv);
|
||
|
}
|
||
|
|
||
|
UINT COleAuto::_SafeArrayGetElemsize(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayGetElemsize(psa);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayGetLBound(SAFEARRAY FAR* psa, unsigned int nDim, long FAR* plLbound)
|
||
|
{
|
||
|
return SafeArrayGetLBound(psa, nDim, plLbound);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayGetUBound(SAFEARRAY FAR* psa, unsigned int nDim, long FAR* plUbound)
|
||
|
{
|
||
|
return SafeArrayGetUBound(psa, nDim, plUbound);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayLock(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayLock(psa);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayPtrOfIndex(SAFEARRAY FAR* psa, long FAR* rgIndices, void HUGEP* FAR* ppvData)
|
||
|
{
|
||
|
return SafeArrayPtrOfIndex(psa, rgIndices, ppvData);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayPutElement(SAFEARRAY FAR* psa, long FAR* rgIndices, void FAR* pv)
|
||
|
{
|
||
|
return SafeArrayPutElement(psa, rgIndices, pv);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayRedim(SAFEARRAY FAR* psa, SAFEARRAYBOUND FAR* psaboundNew)
|
||
|
{
|
||
|
return SafeArrayRedim(psa, psaboundNew);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayUnaccessData(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayUnaccessData(psa);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SafeArrayUnlock(SAFEARRAY FAR* psa)
|
||
|
{
|
||
|
return SafeArrayUnlock(psa);
|
||
|
}
|
||
|
|
||
|
//***************************************************************************
|
||
|
//
|
||
|
// Variant wrappers
|
||
|
//
|
||
|
//***************************************************************************
|
||
|
|
||
|
|
||
|
HRESULT COleAuto::_WbemVariantChangeType(VARIANTARG FAR* pvargDest, VARIANTARG FAR* pvarSrc, VARTYPE vt)
|
||
|
{
|
||
|
HRESULT hRes = WbemVariantChangeType(pvargDest, pvarSrc, vt);
|
||
|
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_VariantChangeType(VARIANTARG FAR* pvargDest, VARIANTARG FAR* pvarSrc, unsigned short wFlags, VARTYPE vt)
|
||
|
{
|
||
|
HRESULT hRes = VariantChangeType(pvargDest, pvarSrc, wFlags, vt);
|
||
|
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_VariantChangeTypeEx(VARIANTARG FAR* pvargDest, VARIANTARG FAR* pvarSrc, LCID lcid, unsigned short wFlags, VARTYPE vt)
|
||
|
{
|
||
|
HRESULT hRes = VariantChangeTypeEx(pvargDest, pvarSrc, lcid, wFlags, vt);
|
||
|
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_VariantClear(VARIANTARG FAR* pvarg)
|
||
|
{
|
||
|
return VariantClear(pvarg);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_VariantCopy(VARIANTARG FAR* pvargDest, VARIANTARG FAR* pvargSrc)
|
||
|
{
|
||
|
HRESULT hRes = VariantCopy(pvargDest, pvargSrc);
|
||
|
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_VariantCopyInd(VARIANT FAR* pvarDest, VARIANTARG FAR* pvargSrc)
|
||
|
{
|
||
|
HRESULT hRes = VariantCopyInd(pvarDest, pvargSrc);
|
||
|
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
void COleAuto::_VariantInit(VARIANTARG FAR* pvarg)
|
||
|
{
|
||
|
VariantInit(pvarg);
|
||
|
}
|
||
|
|
||
|
|
||
|
//***************************************************************************
|
||
|
//
|
||
|
// BSTR wrappers
|
||
|
//
|
||
|
//***************************************************************************
|
||
|
|
||
|
|
||
|
BSTR COleAuto::_SysAllocString(const OLECHAR* sz)
|
||
|
{
|
||
|
BSTR bstr = SysAllocString(sz);
|
||
|
|
||
|
if (NULL == bstr)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return bstr;
|
||
|
}
|
||
|
|
||
|
BSTR COleAuto::_SysAllocStringByteLen(LPCSTR psz, UINT len)
|
||
|
{
|
||
|
BSTR bstr = SysAllocStringByteLen(psz, len);
|
||
|
|
||
|
if (NULL == bstr)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return bstr;
|
||
|
}
|
||
|
|
||
|
BSTR COleAuto::_SysAllocStringLen(const OLECHAR* pch, UINT cch)
|
||
|
{
|
||
|
BSTR bstr = SysAllocStringLen(pch, cch);
|
||
|
|
||
|
if (NULL == bstr)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return bstr;
|
||
|
}
|
||
|
|
||
|
void COleAuto::_SysFreeString(BSTR bstr)
|
||
|
{
|
||
|
SysFreeString(bstr);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SysReAllocString(BSTR* pbstr, const OLECHAR* sz)
|
||
|
{
|
||
|
HRESULT hRes = SysReAllocString(pbstr, sz);
|
||
|
|
||
|
if (FAILED(hRes))
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SysReAllocStringLen(BSTR* pbstr, const OLECHAR* pch, UINT cch)
|
||
|
{
|
||
|
HRESULT hRes = SysReAllocStringLen(pbstr, pch, cch);
|
||
|
|
||
|
if (FAILED(hRes))
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SysStringByteLen(BSTR bstr)
|
||
|
{
|
||
|
return SysStringByteLen(bstr);
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_SysStringLen(BSTR bstr)
|
||
|
{
|
||
|
return SysStringLen(bstr);
|
||
|
}
|
||
|
|
||
|
|
||
|
//***************************************************************************
|
||
|
//
|
||
|
// Conversion wrappers
|
||
|
//
|
||
|
//***************************************************************************
|
||
|
|
||
|
|
||
|
HRESULT COleAuto::_VectorFromBstr (BSTR bstr, SAFEARRAY ** ppsa)
|
||
|
{
|
||
|
HRESULT hRes = VectorFromBstr(bstr, ppsa);
|
||
|
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|
||
|
|
||
|
HRESULT COleAuto::_BstrFromVector (SAFEARRAY *psa, BSTR *pbstr)
|
||
|
{
|
||
|
HRESULT hRes = BstrFromVector(psa, pbstr);
|
||
|
|
||
|
if (E_OUTOFMEMORY == hRes)
|
||
|
{
|
||
|
throw CX_MemoryException();
|
||
|
}
|
||
|
|
||
|
return hRes;
|
||
|
}
|