// Windows/PropVariant.h #ifndef __WINDOWS_PROP_VARIANT_H #define __WINDOWS_PROP_VARIANT_H #include "../Common/MyTypes.h" #include "../Common/MyWindows.h" namespace NWindows { namespace NCOM { HRESULT PropVariant_Clear(PROPVARIANT *p) throw(); HRESULT PropVarEm_Alloc_Bstr(PROPVARIANT *p, unsigned numChars) throw(); HRESULT PropVarEm_Set_Str(PROPVARIANT *p, const char *s) throw(); inline void PropVarEm_Set_UInt32(PROPVARIANT *p, UInt32 v) throw() { p->vt = VT_UI4; p->ulVal = v; } inline void PropVarEm_Set_UInt64(PROPVARIANT *p, UInt64 v) throw() { p->vt = VT_UI8; p->uhVal.QuadPart = v; } inline void PropVarEm_Set_FileTime64(PROPVARIANT *p, UInt64 v) throw() { p->vt = VT_FILETIME; p->filetime.dwLowDateTime = (DWORD)v; p->filetime.dwHighDateTime = (DWORD)(v >> 32); } inline void PropVarEm_Set_Bool(PROPVARIANT *p, bool b) throw() { p->vt = VT_BOOL; p->boolVal = (b ? VARIANT_TRUE : VARIANT_FALSE); } class CPropVariant : public tagPROPVARIANT { public: CPropVariant() { vt = VT_EMPTY; wReserved1 = 0; // wReserved2 = 0; // wReserved3 = 0; // uhVal.QuadPart = 0; bstrVal = 0; } ~CPropVariant() throw() { Clear(); } CPropVariant(const PROPVARIANT &varSrc); CPropVariant(const CPropVariant &varSrc); CPropVariant(BSTR bstrSrc); CPropVariant(LPCOLESTR lpszSrc); CPropVariant(bool bSrc) { vt = VT_BOOL; wReserved1 = 0; boolVal = (bSrc ? VARIANT_TRUE : VARIANT_FALSE); }; CPropVariant(Byte value) { vt = VT_UI1; wReserved1 = 0; bVal = value; } private: CPropVariant(Int16 value); // { vt = VT_I2; wReserved1 = 0; iVal = value; } CPropVariant(Int32 value); // { vt = VT_I4; wReserved1 = 0; lVal = value; } public: CPropVariant(UInt32 value) { vt = VT_UI4; wReserved1 = 0; ulVal = value; } CPropVariant(UInt64 value) { vt = VT_UI8; wReserved1 = 0; uhVal.QuadPart = value; } CPropVariant(Int64 value) { vt = VT_I8; wReserved1 = 0; hVal.QuadPart = value; } CPropVariant(const FILETIME &value) { vt = VT_FILETIME; wReserved1 = 0; filetime = value; } CPropVariant& operator=(const CPropVariant &varSrc); CPropVariant& operator=(const PROPVARIANT &varSrc); CPropVariant& operator=(BSTR bstrSrc); CPropVariant& operator=(LPCOLESTR lpszSrc); CPropVariant& operator=(const char *s); CPropVariant& operator=(bool bSrc) throw(); CPropVariant& operator=(Byte value) throw(); private: CPropVariant& operator=(Int16 value) throw(); public: CPropVariant& operator=(Int32 value) throw(); CPropVariant& operator=(UInt32 value) throw(); CPropVariant& operator=(UInt64 value) throw(); CPropVariant& operator=(Int64 value) throw(); CPropVariant& operator=(const FILETIME &value) throw(); BSTR AllocBstr(unsigned numChars); HRESULT Clear() throw(); HRESULT Copy(const PROPVARIANT *pSrc) throw(); HRESULT Attach(PROPVARIANT *pSrc) throw(); HRESULT Detach(PROPVARIANT *pDest) throw(); HRESULT InternalClear() throw(); void InternalCopy(const PROPVARIANT *pSrc); int Compare(const CPropVariant &a) throw(); }; }} #endif