7 #ifndef _INC_cWinVariant_H
8 #define _INC_cWinVariant_H
42 cWinVariant(
enum VARENUM vtSrc)
46 cWinVariant(
int nSrc,
enum VARENUM vtSrc = VT_I4)
47 : CComVariant(nSrc,vtSrc)
57 ~cWinVariant() throw()
61 cWinVariant(
enum VARENUM vtinit)
69 cWinVariant(
const VARIANT& varSrc)
72 InternalCopy(&varSrc);
74 cWinVariant(
const cWinVariant& varSrc)
77 InternalCopy(&varSrc);
79 cWinVariant(VARIANT* pvarSrc)
84 cWinVariant(LPCOLESTR lpszSrc)
89 cWinVariant(
const char* lpszSrc)
94 cWinVariant(
bool bSrc)
97 boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE;
99 cWinVariant(
int nSrc, VARTYPE vtSrc = VT_I4)
throw()
101 ASSERT(vtSrc == VT_I4 || vtSrc == VT_INT);
105 cWinVariant(BYTE nSrc)
throw()
110 cWinVariant(
short nSrc)
throw()
115 cWinVariant(
long nSrc, VARTYPE vtSrc = VT_I4)
throw()
117 ASSERT(vtSrc == VT_I4 || vtSrc == VT_ERROR);
121 cWinVariant(
float fltSrc)
throw()
126 cWinVariant(
double dblSrc, VARTYPE vtSrc = VT_R8)
throw()
128 ASSERT(vtSrc == VT_R8 || vtSrc == VT_DATE);
132 #if !defined(UNDER_CE) && (defined(USE_64BIT) || (_WIN32_WINNT >= 0x0501) || defined(_ATL_SUPPORT_VT_I8))
133 cWinVariant(LONGLONG nSrc)
throw()
138 cWinVariant(ULONGLONG nSrc)
throw()
144 cWinVariant(CY cySrc)
throw()
151 cWinVariant(IDispatch* pSrc)
throw()
156 if (pdispVal !=
nullptr)
165 if (punkVal !=
nullptr)
168 cWinVariant(
char cSrc)
throw()
173 cWinVariant(
unsigned short nSrc)
throw()
178 cWinVariant(
unsigned long nSrc)
throw()
183 cWinVariant(
unsigned int nSrc, VARTYPE vtSrc = VT_UI4)
throw()
185 ASSERT(vtSrc == VT_UI4 || vtSrc == VT_UINT);
189 cWinVariant(
const CComBSTR& bstrSrc)
196 cWinVariant(
const SAFEARRAY *pSrc)
204 InternalSafeArray(pSrc);
209 void InitTypeInt(
enum VARENUM vtinit)
215 vt = (VARTYPE)vtinit;
219 void InitType(
enum VARENUM vtinit)
225 vt = (VARTYPE)vtinit;
230 const cWinVariant& operator=(
const cWinVariant& varSrc)
232 InternalCopy(&varSrc);
235 const cWinVariant& operator=(
const VARIANT& varSrc)
237 InternalCopy(&varSrc);
241 const cWinVariant& operator=(
const CComBSTR& bstrSrc)
244 bstrVal = bstrSrc.Copy();
245 if (bstrVal ==
nullptr && bstrSrc.m_str !=
nullptr)
248 scode = E_OUTOFMEMORY;
253 const cWinVariant& operator=(LPCOLESTR lpszSrc)
257 bstrVal = ::SysAllocString(lpszSrc);
259 if (bstrVal ==
nullptr && lpszSrc !=
nullptr)
262 scode = E_OUTOFMEMORY;
267 const cWinVariant& operator=(
const char* lpszSrc)
273 this->bstrVal = strTmp.Detach();
275 if (bstrVal ==
nullptr && lpszSrc !=
nullptr)
278 scode = E_OUTOFMEMORY;
283 const cWinVariant& operator=(
bool bSrc)
285 InitTypeInt(VT_BOOL);
286 boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE;
290 const cWinVariant& operator=(
int nSrc)
throw()
297 const cWinVariant& operator=(BYTE nSrc)
throw()
304 const cWinVariant& operator=(
short nSrc)
throw()
311 const cWinVariant& operator=(
long nSrc)
throw()
318 const cWinVariant& operator=(
float fltSrc)
throw()
325 const cWinVariant& operator=(
double dblSrc)
throw()
332 const cWinVariant& operator=(CY cySrc)
throw()
340 const cWinVariant& operator=(IDispatch* pSrc)
throw()
342 InitType(VT_DISPATCH);
345 if (pdispVal !=
nullptr)
350 const cWinVariant& operator=(
IUnknown* pSrc)
throw()
352 InitType(VT_UNKNOWN);
356 if (punkVal !=
nullptr)
361 const cWinVariant& operator=(VARIANT* ppSrc)
363 InitType((VARENUM)(VT_VARIANT | VT_BYREF));
368 const cWinVariant& operator=(
char cSrc)
throw()
375 const cWinVariant& operator=(
unsigned short nSrc)
throw()
382 const cWinVariant& operator=(
unsigned long nSrc)
throw()
389 const cWinVariant& operator=(
unsigned int nSrc)
throw()
396 const cWinVariant& operator=(BYTE* pbSrc)
throw()
398 InitTypeInt((VARENUM)(VT_UI1 | VT_BYREF));
403 const cWinVariant& operator=(
short* pnSrc)
throw()
405 InitTypeInt((VARENUM)(VT_I2 | VT_BYREF));
410 #ifdef _NATIVE_WCHAR_T_DEFINED
411 const cWinVariant& operator=(WORD* pnSrc)
throw()
413 InitTypeInt((VARENUM)(VT_UI2 | VT_BYREF));
419 const cWinVariant& operator=(
int* pnSrc)
throw()
421 InitTypeInt((VARENUM)(VT_I4 | VT_BYREF));
426 const cWinVariant& operator=(UINT* pnSrc)
throw()
428 InitTypeInt((VARENUM)(VT_UI4 | VT_BYREF));
433 const cWinVariant& operator=(
long* pnSrc)
throw()
435 InitTypeInt((VARENUM)(VT_I4 | VT_BYREF));
440 const cWinVariant& operator=(ULONG* pnSrc)
throw()
442 InitTypeInt((VARENUM)(VT_UI4 | VT_BYREF));
447 #if ! defined(UNDER_CE) && (defined(USE_64BIT) || (_WIN32_WINNT >= 0x0501) || defined(_ATL_SUPPORT_VT_I8))
448 const cWinVariant& operator=(LONGLONG nSrc)
throw()
455 const cWinVariant& operator=(LONGLONG* pnSrc)
throw()
457 InitTypeInt((VARENUM)(VT_I8 | VT_BYREF));
462 const cWinVariant& operator=(ULONGLONG nSrc)
throw()
469 const cWinVariant& operator=(ULONGLONG* pnSrc)
throw()
471 InitTypeInt((VARENUM)(VT_UI8 | VT_BYREF));
477 const cWinVariant& operator=(
float* pfSrc)
throw()
479 InitTypeInt((VARENUM)(VT_R4 | VT_BYREF));
484 const cWinVariant& operator=(
double* pfSrc)
throw()
486 InitTypeInt((VARENUM)(VT_R8 | VT_BYREF));
492 void InternalSafeArray(
const SAFEARRAY *pSrc)
496 HRESULT hRes = ::SafeArrayCopy((LPSAFEARRAY)pSrc, &pCopy);
499 ::SafeArrayGetVartype((LPSAFEARRAY)pSrc, &vt);
510 const cWinVariant& operator=(
const SAFEARRAY *pSrc)
515 InternalSafeArray(pSrc);
525 COMPARE_t CompareVar(
const VARIANT& varSrc)
const
529 #if ( _MSC_VER >= 1300 ) || defined(__GNUC__)
530 return ::VarCmp((VARIANT*)
this, (VARIANT*)&varSrc, LOCALE_USER_DEFAULT, 0);
532 return ::VarCmp((VARIANT*)
this, (VARIANT*)&varSrc, LOCALE_USER_DEFAULT);
535 bool operator==(
const VARIANT& varSrc)
const throw()
538 if (vt == VT_NULL && varSrc.vt == VT_NULL)
540 return(CompareVar(varSrc) == VARCMP_EQ);
542 bool operator!=(
const VARIANT& varSrc)
const throw()
544 if (vt == VT_NULL && varSrc.vt == VT_NULL)
546 return(CompareVar(varSrc) != VARCMP_EQ);
548 bool operator<(
const VARIANT& varSrc)
const throw()
550 if (vt == VT_NULL && varSrc.vt == VT_NULL)
552 return(CompareVar(varSrc) == VARCMP_LT);
554 bool operator>(
const VARIANT& varSrc)
const throw()
556 if (vt == VT_NULL && varSrc.vt == VT_NULL)
558 return(CompareVar(varSrc) == VARCMP_GT);
566 return ::VariantClear(
this);
568 HRESULT Copy(
const VARIANT* pSrc)
570 return ::VariantCopy(
this,
const_cast<VARIANT*
>(pSrc));
573 HRESULT CopyTo(BSTR* pstrDest)
const;
585 memcpy(
this, pSrc,
sizeof(VARIANT));
596 if (pDest ==
nullptr)
600 HRESULT hRes = ::VariantClear(pDest);
604 memcpy(pDest,
this,
sizeof(VARIANT));
615 HRESULT ChangeType(VARTYPE vtNew,
const VARIANT* pSrc =
nullptr)
617 VARIANT* pVar =
const_cast<VARIANT*
>(pSrc);
622 return ::VariantChangeType(
this, pVar, 0, vtNew);
626 template<
typename _TYPE >
627 void SetByRef(_TYPE* pT)
throw()
630 vt = CVarTypeInfo< _TYPE >::VT | VT_BYREF;
635 HRESULT WriteToStream(IStream* pStream);
636 HRESULT ReadFromStream(IStream* pStream);
639 ULONG GetSize()
const;
654 void InternalCopy(
const VARIANT* pSrc)
665 static inline BSTR GetBStr(VARIANT* pVar);
670 inline BSTR cWinVariant::GetBStr(VARIANT* pVar)
675 case VT_BYREF | VT_VARIANT:
676 return cWinVariant::GetBStr(pVar->pvarVal);
677 case VT_BYREF | VT_BSTR:
678 return *pVar->pbstrVal;
680 return pVar->bstrVal;
688 typedef GrayLib::cWinVariant CComVariant;
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define SUCCEEDED(x)
Definition: HResult.h:29
#define FAILED(x)
Definition: HResult.h:30
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
int COMPARE_t
Definition: cKernel.h:38
Definition: IUnknown.h:68
UNITTEST2_PREDEF(cQuadtree)
cStringW cWinString
Definition: cWinString.h:251
bool operator<(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:234
bool operator!=(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:254
bool operator==(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:250
bool operator>(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:242
static void Zero(void *pData, size_t nSizeBlock) noexcept
Definition: cMem.h:100