13 #error comutil.h header cannot be included under /clr:safe or /clr:pure 
   16 #if !defined(_INC_COMUTIL) 
   21 #if !defined(_COM_ASSERT) 
   24 # define _COM_ASSERT(x) assert(x) 
   26 # define _COM_ASSERT(x) ((void)0) 
   30 #if !defined(_SECURE_COMPILER_COM) 
   32 #define _SECURE_COMPILER_COM 1 
   35 #if _SECURE_COMPILER_COM && defined(__GOT_SECURE_LIB__) && __GOT_SECURE_LIB__ >= 200402L 
   39 # define _COM_MEMCPY_S(dest, destsize, src, count) memcpy_s(dest, destsize, src, count) 
   41 #  define _COM_PRINTF_S_1(dest, destsize, format, arg1) swprintf_s(dest, destsize, format, arg1) 
   43 #  define _COM_PRINTF_S_1(dest, destsize, format, arg1) sprintf_s(dest, destsize, format, arg1) 
   48 # define _COM_MEMCPY_S(dest, destsize, src, count) memcpy(dest, src, count) 
   49 # define _COM_PRINTF_S_1(dest, destsize, format, arg1) wsprintf(dest, format, arg1) 
   54 #pragma warning(disable: 4290) 
   55 #pragma warning(disable: 4310) 
   57 #pragma push_macro("new") 
   62 #define S_OK                            ((HRESULT)0L) 
   64 #ifndef INTSAFE_E_ARITHMETIC_OVERFLOW 
   65 #define INTSAFE_E_ARITHMETIC_OVERFLOW   ((HRESULT)0x80070216L)  // 0x216 = 534 = ERROR_ARITHMETIC_OVERFLOW 
   67 #ifndef INTSAFE_UINT_MAX 
   68 #define INTSAFE_UINT_MAX                0xffffffff 
   71 #define FAILED(hr) (((HRESULT)(hr)) < 0) 
  100     static HRESULT 
UIntAdd(UINT uAugend, UINT uAddend, UINT *puResult)
 
  102         if((uAugend + uAddend) < uAddend)
 
  106         *puResult = uAugend + uAddend;
 
  110     static HRESULT 
UIntMult(UINT uMultiplicand, UINT uMultiplier, UINT *puResult)
 
  112         ULONGLONG ull64Result = UInt32x32To64(uMultiplicand, uMultiplier);
 
  115             *puResult = (UINT)ull64Result;
 
  153     _bstr_t(BSTR bstr, 
bool fCopy) ;
 
  178     operator const wchar_t*() 
const throw();
 
  179     operator wchar_t*() 
const throw();
 
  180     operator const char*() 
const ;
 
  181     operator char*() 
const ;
 
  195     BSTR 
copy(
bool fCopy = 
true) 
const ;
 
  196     unsigned int length() 
const throw();
 
  223         Data_t(
const wchar_t* s) ;
 
  224         Data_t(BSTR bstr, 
bool fCopy) ;
 
  229         unsigned long AddRef() 
throw();
 
  230         unsigned long Release() 
throw();
 
  231         unsigned long RefCount() 
const throw();
 
  235         operator const wchar_t*() 
const throw();
 
  236         operator const char*() 
const ;
 
  246         void Attach(BSTR s) 
throw();
 
  247         unsigned int Length() 
const throw();
 
  252         void* 
operator new(
size_t sz);          
 
  271         void _Free() throw();
 
  283     void _Free() throw();
 
  332     : m_Data(new 
Data_t(bstr, fCopy))
 
  372     if (s == 
NULL || static_cast<const char*>(*
this) != s)
 
  391     if (s == 
NULL || static_cast<const wchar_t*>(*
this) != s)
 
  415     if (newData == 
NULL) {
 
  470 inline _bstr_t::operator 
const wchar_t*() 
const throw()
 
  472     return (m_Data != 
NULL) ? m_Data->GetWString() : 
NULL;
 
  477 inline _bstr_t::operator 
wchar_t*() 
const throw()
 
  479     return const_cast<wchar_t*
>((m_Data != 
NULL) ? m_Data->GetWString() : 
NULL);
 
  484 inline _bstr_t::operator 
const char*() 
const  
  486     return (m_Data != 
NULL) ? m_Data->GetString() : 
NULL;
 
  491 inline _bstr_t::operator 
char*() 
const  
  493     return const_cast<char*
>((m_Data != 
NULL) ? m_Data->GetString() : 
NULL);
 
  647     if (m_Data == str.m_Data) {
 
  651     if (m_Data == 
NULL) {
 
  652         if (str.length() == 0) {
 
  660     if (str.m_Data == 
NULL){
 
  661         if (this->length() == 0) {
 
  669     return m_Data->Compare(*str.m_Data);
 
  681     : m_str(
NULL), m_RefCount(1)
 
  689     : m_str(
NULL), m_RefCount(1)
 
  691     m_wstr = ::SysAllocString(s);
 
  702     : m_str(
NULL), m_RefCount(1)
 
  704     if (fCopy && bstr != 
NULL) {
 
  705         m_wstr = ::SysAllocStringByteLen(reinterpret_cast<char*>(bstr),
 
  706                                          ::SysStringByteLen(bstr));
 
  708         if (m_wstr == 
NULL) {
 
  720     : m_str(
NULL), m_RefCount(1)
 
  722     const unsigned int l1 = s1.
length();
 
  723     const unsigned int l2 = s2.
length();
 
  733     m_wstr = ::SysAllocStringByteLen(
NULL, (l1 + l2) * 
sizeof(
wchar_t));
 
  744     const wchar_t* wstr1 = 
static_cast<const wchar_t*
>(s1);
 
  748         _COM_MEMCPY_S(m_wstr, (l1 + l2 + 1) * 
sizeof(
wchar_t), wstr1, (l1 + 1) * 
sizeof(
wchar_t));
 
  751     const wchar_t* wstr2 = 
static_cast<const wchar_t*
>(s2);
 
  755         _COM_MEMCPY_S(m_wstr + l1, (l2 + 1) * 
sizeof(
wchar_t), wstr2, (l2 + 1) * 
sizeof(
wchar_t));
 
  767     InterlockedIncrement(reinterpret_cast<long*>(&m_RefCount));
 
  773     unsigned long cRef = InterlockedDecrement(reinterpret_cast<long*>(&m_RefCount));
 
  794 inline _bstr_t::Data_t::operator 
const wchar_t*() 
const throw()
 
  801 inline _bstr_t::Data_t::operator 
const char*() 
const  
  835     if (m_wstr != 
NULL) {
 
  836         BSTR bstr = ::SysAllocStringByteLen(reinterpret_cast<char*>(m_wstr), ::SysStringByteLen(m_wstr));
 
  853         m_wstr = ::SysAllocStringByteLen(reinterpret_cast<char*>(s), ::SysStringByteLen(s));
 
  871     return m_wstr ? ::SysStringLen(m_wstr) : 0;
 
  880     const unsigned int l1 = ::SysStringLen(m_wstr);
 
  881     const unsigned int l2 = ::SysStringLen(str.
m_wstr);
 
  883     unsigned int len = l1;
 
  892         if (*bstr1++ != *bstr2++) {
 
  893             return bstr1[-1] - bstr2[-1];
 
  897     return (l1 < l2) ? -1 : (l1 == l2) ? 0 : 1;
 
  902 #ifdef _COM_OPERATOR_NEW_THROWS 
  903 inline void* _bstr_t::Data_t::operator 
new(
size_t sz) 
 
  906         return ::operator 
new(sz);
 
  912 #else // _COM_OPERATOR_NEW_THROWS 
  913 inline void* _bstr_t::Data_t::operator 
new(
size_t sz) 
 
  915     return ::operator 
new(sz);
 
  917 #endif // _COM_OPERATOR_NEW_THROWS 
  930     if (m_wstr != 
NULL) {
 
  931         ::SysFreeString(m_wstr);
 
 1014     _variant_t(
short sSrc, VARTYPE vtSrc = VT_I2) ;    
 
 1015     _variant_t(
long lSrc, VARTYPE vtSrc = VT_I4) ;     
 
 1017     _variant_t(
double dblSrc, VARTYPE vtSrc = VT_R8) ; 
 
 1022     _variant_t(IDispatch* pSrc, 
bool fAddRef = 
true) 
throw();           
 
 1024     _variant_t(IUnknown* pSrc, 
bool fAddRef = 
true) 
throw();            
 
 1033 #if (_WIN32_WINNT >= 0x0501) 
 1044     operator short() 
const ;                           
 
 1045     operator long() 
const ;                            
 
 1046     operator float() 
const ;                           
 
 1047     operator double() 
const ;                          
 
 1048     operator CY() 
const ;                              
 
 1050     operator IDispatch*() 
const ;                      
 
 1051     operator bool() 
const ;                            
 
 1052     operator IUnknown*() 
const ;                       
 
 1053     operator DECIMAL() 
const ;                         
 
 1054     operator BYTE() 
const ;                            
 
 1055     operator VARIANT() 
const throw();
 
 1057     operator char() 
const ;                            
 
 1058     operator unsigned short() 
const ;                  
 
 1059     operator unsigned long() 
const ;                   
 
 1060     operator int() 
const ;                             
 
 1061     operator unsigned int() 
const ;                    
 
 1062 #if (_WIN32_WINNT >= 0x0501) 
 1063     operator __int64() 
const ;                         
 
 1064     operator unsigned __int64() 
const ;                
 
 1092 #if (_WIN32_WINNT >= 0x0501) 
 1099     bool operator==(
const VARIANT& varSrc) 
const throw();
 
 1100     bool operator==(
const VARIANT* pSrc) 
const throw();
 
 1102     bool operator!=(
const VARIANT& varSrc) 
const throw();
 
 1103     bool operator!=(
const VARIANT* pSrc) 
const throw();
 
 1109     void Attach(VARIANT& varSrc) ;
 
 1110     VARIANT 
Detach() 
throw();
 
 1112     VARIANT& GetVARIANT() 
throw();
 
 1115     void ChangeType(VARTYPE vartype, 
const _variant_t* pSrc = 
NULL) ;
 
 1117     void SetString(
const char* pSrc) ; 
 
 1130     ::VariantInit(
this);
 
 1137     ::VariantInit(
this);
 
 1149         ::VariantInit(
this);
 
 1158     ::VariantInit(
this);
 
 1159     _com_util::CheckError(::VariantCopy(
this, const_cast<VARIANT*>(static_cast<const VARIANT*>(&varSrc))));
 
 1168         ::VariantInit(
this);
 
 1172         _COM_MEMCPY_S(
this, 
sizeof(varSrc), &varSrc, 
sizeof(varSrc));
 
 1173         V_VT(&varSrc) = VT_EMPTY;
 
 1182     if ((vtSrc != VT_I2) && (vtSrc != VT_BOOL)) {
 
 1187     if (vtSrc == VT_BOOL) {
 
 1188         V_VT(
this) = VT_BOOL;
 
 1189         V_BOOL(
this) = (sSrc ? VARIANT_TRUE : VARIANT_FALSE);
 
 1202     if ((vtSrc != VT_I4) && (vtSrc != VT_ERROR) && (vtSrc != VT_BOOL)) {
 
 1207     if (vtSrc == VT_ERROR) {
 
 1208         V_VT(
this) = VT_ERROR;
 
 1209         V_ERROR(
this) = lSrc;
 
 1211     else if (vtSrc == VT_BOOL) {
 
 1212         V_VT(
this) = VT_BOOL;
 
 1213         V_BOOL(
this) = (lSrc ? VARIANT_TRUE : VARIANT_FALSE);
 
 1226     V_R4(
this) = fltSrc;
 
 1234     if ((vtSrc != VT_R8) && (vtSrc != VT_DATE)) {
 
 1239     if (vtSrc == VT_DATE) {
 
 1240         V_VT(
this) = VT_DATE;
 
 1241         V_DATE(
this) = dblSrc;
 
 1245         V_R8(
this) = dblSrc;
 
 1261     V_VT(
this) = VT_BSTR;
 
 1263     BSTR bstr = 
static_cast<wchar_t*
>(bstrSrc);
 
 1265         V_BSTR(
this) = 
NULL;
 
 1268         V_BSTR(
this) = ::SysAllocStringByteLen(reinterpret_cast<char*>(bstr),
 
 1269                                                ::SysStringByteLen(bstr));
 
 1270         if (V_BSTR(
this) == 
NULL) {
 
 1280     V_VT(
this) = VT_BSTR;
 
 1282     V_BSTR(
this) = ::SysAllocString(pSrc);
 
 1284     if (V_BSTR(
this) == 
NULL && pSrc != 
NULL) {
 
 1293     V_VT(
this) = VT_BSTR;
 
 1301     V_VT(
this) = VT_DISPATCH;
 
 1302     V_DISPATCH(
this) = pSrc;
 
 1308         if (V_DISPATCH(
this) != 
NULL) {
 
 1309             V_DISPATCH(
this)->AddRef();
 
 1318     V_VT(
this) = VT_BOOL;
 
 1319     V_BOOL(
this) = (boolSrc ? VARIANT_TRUE : VARIANT_FALSE);
 
 1326     V_VT(
this) = VT_UNKNOWN;
 
 1327     V_UNKNOWN(
this) = pSrc;
 
 1333         if (V_UNKNOWN(
this) != 
NULL) {
 
 1334             V_UNKNOWN(
this)->AddRef();
 
 1345     V_DECIMAL(
this) = decSrc;
 
 1346     V_VT(
this) = VT_DECIMAL;
 
 1353     V_VT(
this) = VT_UI1;
 
 1369     V_VT(
this) = VT_UI2;
 
 1370     V_UI2(
this) = usSrc;
 
 1377     V_VT(
this) = VT_UI4;
 
 1378     V_UI4(
this) = ulSrc;
 
 1385     V_VT(
this) = VT_INT;
 
 1393     V_VT(
this) = VT_UINT;
 
 1394     V_UINT(
this) = uiSrc;
 
 1397 #if (_WIN32_WINNT >= 0x0501) 
 1410     V_VT(
this) = VT_UI8;
 
 1411     V_UI8(
this) = ui8Src;
 
 1423 inline _variant_t::operator short()
 const  
 1425     if (V_VT(
this) == VT_I2) {
 
 1432     return V_I2(&varDest);
 
 1437 inline _variant_t::operator long()
 const  
 1439     if (V_VT(
this) == VT_I4) {
 
 1446     return V_I4(&varDest);
 
 1451 inline _variant_t::operator float()
 const  
 1453     if (V_VT(
this) == VT_R4) {
 
 1460     return V_R4(&varDest);
 
 1465 inline _variant_t::operator double()
 const  
 1467     if (V_VT(
this) == VT_R8) {
 
 1474     return V_R8(&varDest);
 
 1479 inline _variant_t::operator CY()
 const  
 1481     if (V_VT(
this) == VT_CY) {
 
 1488     return V_CY(&varDest);
 
 1495     if (V_VT(
this) == VT_BSTR) {
 
 1496         return V_BSTR(
this);
 
 1502     return V_BSTR(&varDest);
 
 1507 inline _variant_t::operator IDispatch*() 
const  
 1509     if (V_VT(
this) == VT_DISPATCH) {
 
 1510         if (V_DISPATCH(
this) != 
NULL) {
 
 1511             V_DISPATCH(
this)->AddRef();
 
 1513         return V_DISPATCH(
this);
 
 1519     if (V_DISPATCH(&varDest) != 
NULL) {
 
 1520         V_DISPATCH(&varDest)->AddRef();
 
 1523     return V_DISPATCH(&varDest);
 
 1528 inline _variant_t::operator 
bool()
 const  
 1530     if (V_VT(
this) == VT_BOOL) {
 
 1531         return V_BOOL(
this) ? 
true : 
false;
 
 1537     return (V_BOOL(&varDest) == VARIANT_TRUE) ? 
true : 
false;
 
 1542 inline _variant_t::operator IUnknown*() 
const  
 1544     if (V_VT(
this) == VT_UNKNOWN) {
 
 1545         if (V_UNKNOWN(
this) != 
NULL) {
 
 1546             V_UNKNOWN(
this)->AddRef();
 
 1548         return V_UNKNOWN(
this);
 
 1554     if (V_UNKNOWN(&varDest) != 
NULL) {
 
 1555         V_UNKNOWN(&varDest)->AddRef();
 
 1558     return V_UNKNOWN(&varDest);
 
 1563 inline _variant_t::operator DECIMAL()
 const  
 1565     if (V_VT(
this) == VT_DECIMAL) {
 
 1566         return V_DECIMAL(
this);
 
 1572     return V_DECIMAL(&varDest);
 
 1577 inline _variant_t::operator BYTE()
 const  
 1579     if (V_VT(
this) == VT_UI1) {
 
 1586     return V_UI1(&varDest);
 
 1591 inline _variant_t::operator VARIANT() 
const throw()
 
 1593     return *(VARIANT*) 
this;
 
 1598 inline _variant_t::operator char()
 const   
 1600     if (V_VT(
this) == VT_I1) {
 
 1607     return V_I1(&varDest);
 
 1612 inline _variant_t::operator 
unsigned short()
 const   
 1614     if (V_VT(
this) == VT_UI2) {
 
 1621     return V_UI2(&varDest);
 
 1626 inline _variant_t::operator 
unsigned long()
 const   
 1628     if (V_VT(
this) == VT_UI4) {
 
 1635     return V_UI4(&varDest);
 
 1640 inline _variant_t::operator 
int()
 const   
 1642     if (V_VT(
this) == VT_INT) {
 
 1649     return V_INT(&varDest);
 
 1654 inline _variant_t::operator 
unsigned int()
 const   
 1656     if (V_VT(
this) == VT_UINT) {
 
 1657         return V_UINT(
this);
 
 1663     return V_UINT(&varDest);
 
 1666 #if (_WIN32_WINNT >= 0x0501) 
 1669 inline _variant_t::operator __int64()
 const   
 1671     if (V_VT(
this) == VT_I8) {
 
 1678     return V_I8(&varDest);
 
 1683 inline _variant_t::operator 
unsigned __int64()
 const   
 1685     if (V_VT(
this) == VT_UI8) {
 
 1692     return V_UI8(&varDest);
 
 1729     _com_util::CheckError(::VariantCopy(
this, const_cast<VARIANT*>(static_cast<const VARIANT*>(&varSrc))));
 
 1739     if (V_VT(
this) == VT_I2) {
 
 1742     else if (V_VT(
this) == VT_BOOL) {
 
 1743         V_BOOL(
this) = (sSrc ? VARIANT_TRUE : VARIANT_FALSE);
 
 1762     if (V_VT(
this) == VT_I4) {
 
 1765     else if (V_VT(
this) == VT_ERROR) {
 
 1766         V_ERROR(
this) = lSrc;
 
 1768     else if (V_VT(
this) == VT_BOOL) {
 
 1769         V_BOOL(
this) = (lSrc ? VARIANT_TRUE : VARIANT_FALSE);
 
 1787     if (V_VT(
this) != VT_R4) {
 
 1795     V_R4(
this) = fltSrc;
 
 1805     if (V_VT(
this) == VT_R8) {
 
 1806         V_R8(
this) = dblSrc;
 
 1808     else if(V_VT(
this) == VT_DATE) {
 
 1809         V_DATE(
this) = dblSrc;
 
 1817         V_R8(
this) = dblSrc;
 
 1827     if (V_VT(
this) != VT_CY) {
 
 1844     _COM_ASSERT(V_VT(
this) != VT_BSTR || (BSTR) bstrSrc == 
NULL || V_BSTR(
this) != (BSTR) bstrSrc);
 
 1850     V_VT(
this) = VT_BSTR;
 
 1853         V_BSTR(
this) = 
NULL;
 
 1856         BSTR bstr = 
static_cast<wchar_t*
>(bstrSrc);
 
 1857         V_BSTR(
this) = ::SysAllocStringByteLen(reinterpret_cast<char*>(bstr),
 
 1858                                                ::SysStringByteLen(bstr));
 
 1860         if (V_BSTR(
this) == 
NULL) {
 
 1872     _COM_ASSERT(V_VT(
this) != VT_BSTR || pSrc == 
NULL || V_BSTR(
this) != pSrc);
 
 1878     V_VT(
this) = VT_BSTR;
 
 1881         V_BSTR(
this) = 
NULL;
 
 1884         V_BSTR(
this) = ::SysAllocString(pSrc);
 
 1886         if (V_BSTR(
this) == 
NULL) {
 
 1898     _COM_ASSERT(V_VT(
this) != (VT_I1 | VT_BYREF) || pSrc == 
NULL || V_I1REF(
this) != pSrc);
 
 1904     V_VT(
this) = VT_BSTR;
 
 1914     _COM_ASSERT(V_VT(
this) != VT_DISPATCH || pSrc == 0 || V_DISPATCH(
this) != pSrc);
 
 1920     V_VT(
this) = VT_DISPATCH;
 
 1921     V_DISPATCH(
this) = pSrc;
 
 1923     if (V_DISPATCH(
this) != 
NULL) {
 
 1926         V_DISPATCH(
this)->AddRef();
 
 1936     if (V_VT(
this) != VT_BOOL) {
 
 1941         V_VT(
this) = VT_BOOL;
 
 1944     V_BOOL(
this) = (boolSrc ? VARIANT_TRUE : VARIANT_FALSE);
 
 1953     _COM_ASSERT(V_VT(
this) != VT_UNKNOWN || pSrc == 
NULL || V_UNKNOWN(
this) != pSrc);
 
 1959     V_VT(
this) = VT_UNKNOWN;
 
 1960     V_UNKNOWN(
this) = pSrc;
 
 1962     if (V_UNKNOWN(
this) != 
NULL) {
 
 1965         V_UNKNOWN(
this)->AddRef();
 
 1975     if (V_VT(
this) != VT_DECIMAL) {
 
 1982     V_DECIMAL(
this) = decSrc;
 
 1983     V_VT(
this) = VT_DECIMAL;
 
 1992     if (V_VT(
this) != VT_UI1) {
 
 1997         V_VT(
this) = VT_UI1;
 
 2009     if (V_VT(
this) != VT_I1) {
 
 2026     if (V_VT(
this) != VT_UI2) {
 
 2031         V_VT(
this) = VT_UI2;
 
 2034     V_UI2(
this) = usSrc;
 
 2043     if (V_VT(
this) != VT_UI4) {
 
 2048         V_VT(
this) = VT_UI4;
 
 2051     V_UI4(
this) = ulSrc;
 
 2060     if (V_VT(
this) != VT_INT) {
 
 2065         V_VT(
this) = VT_INT;
 
 2077     if (V_VT(
this) != VT_UINT) {
 
 2082         V_VT(
this) = VT_UINT;
 
 2085     V_UINT(
this) = uiSrc;
 
 2090 #if (_WIN32_WINNT >= 0x0501) 
 2095     if (V_VT(
this) != VT_I8) {
 
 2112     if (V_VT(
this) != VT_UI8) {
 
 2117         V_VT(
this) = VT_UI8;
 
 2120     V_UI8(
this) = ui8Src;
 
 2136     return *
this == &varSrc;
 
 2139 #pragma warning(push) 
 2140 #pragma warning(disable: 4702) // unreachable code 
 2157     if (V_VT(
this) != V_VT(pSrc)) {
 
 2164     switch (V_VT(
this)) {
 
 2170             return V_I2(
this) == V_I2(pSrc);
 
 2173             return V_I4(
this) == V_I4(pSrc);
 
 2176             return V_R4(
this) == V_R4(pSrc);
 
 2179             return V_R8(
this) == V_R8(pSrc);
 
 2182             return memcmp(&(V_CY(
this)), &(V_CY(pSrc)), 
sizeof(CY)) == 0;
 
 2185             return V_DATE(
this) == V_DATE(pSrc);
 
 2188             return (::SysStringByteLen(V_BSTR(
this)) == ::SysStringByteLen(V_BSTR(pSrc))) &&
 
 2189                     (
memcmp(V_BSTR(
this), V_BSTR(pSrc), ::SysStringByteLen(V_BSTR(
this))) == 0);
 
 2192             return V_DISPATCH(
this) == V_DISPATCH(pSrc);
 
 2195             return V_ERROR(
this) == V_ERROR(pSrc);
 
 2198             return V_BOOL(
this) == V_BOOL(pSrc);
 
 2201             return V_UNKNOWN(
this) == V_UNKNOWN(pSrc);
 
 2204             return memcmp(&(V_DECIMAL(
this)), &(V_DECIMAL(pSrc)), 
sizeof(DECIMAL)) == 0;
 
 2207             return V_UI1(
this) == V_UI1(pSrc);
 
 2210             return V_I1(
this) == V_I1(pSrc);
 
 2213             return V_UI2(
this) == V_UI2(pSrc);
 
 2216             return V_UI4(
this) == V_UI4(pSrc);
 
 2219             return V_INT(
this) == V_INT(pSrc);
 
 2222             return V_UINT(
this) == V_UINT(pSrc);
 
 2224 #if (_WIN32_WINNT >= 0x0501) 
 2226             return V_I8(
this) == V_I8(pSrc);
 
 2229             return V_UI8(
this) == V_UI8(pSrc);
 
 2240 #pragma warning(pop) 
 2246     return !(*
this == &varSrc);
 
 2253     return !(*
this == pSrc);
 
 2279     _COM_MEMCPY_S(
this, 
sizeof(varSrc), &varSrc, 
sizeof(varSrc));
 
 2280     V_VT(&varSrc) = VT_EMPTY;
 
 2285     VARIANT varResult = *
this;
 
 2286     V_VT(
this) = VT_EMPTY;
 
 2293     return *(VARIANT*) 
this;
 
 2299     return (VARIANT*) 
this;
 
 2314     if ((
this != pSrc) || (vartype != V_VT(
this))) {
 
 2316                                                   const_cast<VARIANT*>(static_cast<const VARIANT*>(pSrc)),
 
 2334     ::VariantClear(
this);
 
 2348     if (V_VT(&var) == VT_BSTR) {
 
 2349         *
this = V_BSTR(&var);
 
 2356     *
this = V_BSTR(&varDest);
 
 2363     if (V_VT(&var) == VT_BSTR) {
 
 2364         *
this = V_BSTR(&var);
 
 2371     *
this = V_BSTR(&varDest);
 
 2379 #define bstr_t _bstr_t 
 2380 #define variant_t _variant_t 
 2383 #pragma pop_macro("new") 
 2385 #pragma warning(pop) 
 2387 #endif  // _INC_COMUTIL 
unsigned long RefCount() const 
Definition: comutil.h:781
 
BSTR __stdcall ConvertStringToBSTR(const char *pSrc)
 
void _Free()
Definition: comutil.h:928
 
bool operator==(const VARIANT &varSrc) const 
Definition: comutil.h:2134
 
Definition: comutil.h:144
 
void Clear()
Definition: comutil.h:2264
 
#define NULL
Definition: vcruntime.h:236
 
int _Compare(const _bstr_t &str) const 
Definition: comutil.h:645
 
int Compare(const Data_t &str) const 
Definition: comutil.h:876
 
void ChangeType(VARTYPE vartype, const _variant_t *pSrc=NULL)
Definition: comutil.h:2305
 
#define S_OK
Definition: comutil.h:62
 
void Assign(BSTR s)
Definition: comutil.h:848
 
unsigned long Release()
Definition: comutil.h:771
 
bool operator>=(const _bstr_t &str) const 
Definition: comutil.h:532
 
bool operator!=(const _bstr_t &str) const 
Definition: comutil.h:512
 
BSTR * GetAddress()
Definition: comutil.h:589
 
_Check_return_ int __cdecl memcmp(_In_reads_bytes_(_Size) void const *_Buf1, _In_reads_bytes_(_Size) void const *_Buf2, _In_ size_t _Size)
 
_variant_t & operator=(const VARIANT &varSrc)
Definition: comutil.h:1704
 
~Data_t()
Definition: comutil.h:921
 
BSTR Detach()
Definition: comutil.h:609
 
void Attach(BSTR s)
Definition: comutil.h:597
 
#define INTSAFE_UINT_MAX
Definition: comutil.h:68
 
void _Free()
Definition: comutil.h:635
 
void __declspec(noreturn) __stdcall _com_issue_error(HRESULT)
Cancels the currently executing task. This function can be called from within the body of a task to a...
Definition: ppltasks.h:131
 
Definition: comutil.h:1002
 
~_bstr_t()
Definition: comutil.h:341
 
VARIANT Detach()
Definition: comutil.h:2283
 
unsigned long AddRef()
Definition: comutil.h:765
 
Data_t * m_Data
Definition: comutil.h:277
 
unsigned long m_RefCount
Definition: comutil.h:257
 
_variant_t()
Definition: comutil.h:1128
 
BSTR copy(bool fCopy=true) const 
Definition: comutil.h:545
 
unsigned int Length() const 
Definition: comutil.h:869
 
char * m_str
Definition: comutil.h:256
 
_BidIt1 _Compare(_BidIt1 _Begin1, _BidIt1 _End1, _BidIt2 _Begin2, _BidIt2 _End2, const _RxTraits &_Traits, regex_constants::syntax_option_type _Sflags)
Definition: regex:4355
 
_bstr_t & operator+=(const _bstr_t &s)
Definition: comutil.h:412
 
void __stdcall _com_issue_error(HRESULT)
 
BSTR & GetBSTR()
Definition: comutil.h:576
 
#define FAILED(hr)
Definition: comutil.h:71
 
const char * GetString() const 
Definition: comutil.h:822
 
_bstr_t operator+(const char *s1, const _bstr_t &s2)
Definition: comutil.h:444
 
#define bool
Definition: stdbool.h:15
 
const wchar_t * GetWString() const 
Definition: comutil.h:812
 
_bstr_t()
Definition: comutil.h:295
 
Definition: comutil.h:218
 
bool operator!() const 
Definition: comutil.h:502
 
static HRESULT UIntAdd(UINT uAugend, UINT uAddend, UINT *puResult)
Definition: comutil.h:100
 
_bstr_t & operator=(const _bstr_t &s)
Definition: comutil.h:354
 
bool operator>(const _bstr_t &str) const 
Definition: comutil.h:522
 
BSTR Copy() const 
Definition: comutil.h:833
 
void SetString(const char *pSrc)
Definition: comutil.h:2321
 
VARIANT * GetAddress()
Definition: comutil.h:2296
 
#define _COM_MEMCPY_S(dest, destsize, src, count)
Definition: comutil.h:48
 
bool operator<(const _bstr_t &str) const 
Definition: comutil.h:517
 
_bstr_t operator+(const _bstr_t &s) const 
Definition: comutil.h:428
 
void Assign(BSTR s)
Definition: comutil.h:559
 
VARIANT & GetVARIANT()
Definition: comutil.h:2291
 
void Attach(BSTR s)
Definition: comutil.h:858
 
void _AddRef()
Definition: comutil.h:626
 
bool operator!=(const VARIANT &varSrc) const 
Definition: comutil.h:2244
 
void Attach(VARIANT &varSrc)
Definition: comutil.h:2269
 
~_variant_t()
Definition: comutil.h:2332
 
#define _COM_ASSERT(x)
Definition: comutil.h:26
 
static HRESULT UIntMult(UINT uMultiplicand, UINT uMultiplier, UINT *puResult)
Definition: comutil.h:110
 
void CheckError(HRESULT hr)
Definition: comutil.h:94
 
BSTR m_wstr
Definition: comutil.h:255
 
bool operator==(const _bstr_t &str) const 
Definition: comutil.h:507
 
bool operator<=(const _bstr_t &str) const 
Definition: comutil.h:527
 
char *__stdcall ConvertBSTRToString(BSTR pSrc)
 
unsigned int length() const 
Definition: comutil.h:552
 
#define INTSAFE_E_ARITHMETIC_OVERFLOW
Definition: comutil.h:65