• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Windows/PropVariant.h
2 
3 #ifndef __WINDOWS_PROP_VARIANT_H
4 #define __WINDOWS_PROP_VARIANT_H
5 
6 #include "../Common/MyTypes.h"
7 #include "../Common/MyWindows.h"
8 #include "../Common/MyString.h"
9 
10 namespace NWindows {
11 namespace NCOM {
12 
13 BSTR AllocBstrFromAscii(const char *s) throw();
14 
15 HRESULT PropVariant_Clear(PROPVARIANT *p) throw();
16 
17 HRESULT PropVarEm_Alloc_Bstr(PROPVARIANT *p, unsigned numChars) throw();
18 HRESULT PropVarEm_Set_Str(PROPVARIANT *p, const char *s) throw();
19 
PropVarEm_Set_UInt32(PROPVARIANT * p,UInt32 v)20 inline void PropVarEm_Set_UInt32(PROPVARIANT *p, UInt32 v) throw()
21 {
22   p->vt = VT_UI4;
23   p->ulVal = v;
24 }
25 
PropVarEm_Set_UInt64(PROPVARIANT * p,UInt64 v)26 inline void PropVarEm_Set_UInt64(PROPVARIANT *p, UInt64 v) throw()
27 {
28   p->vt = VT_UI8;
29   p->uhVal.QuadPart = v;
30 }
31 
PropVarEm_Set_FileTime64(PROPVARIANT * p,UInt64 v)32 inline void PropVarEm_Set_FileTime64(PROPVARIANT *p, UInt64 v) throw()
33 {
34   p->vt = VT_FILETIME;
35   p->filetime.dwLowDateTime = (DWORD)v;
36   p->filetime.dwHighDateTime = (DWORD)(v >> 32);
37 }
38 
PropVarEm_Set_Bool(PROPVARIANT * p,bool b)39 inline void PropVarEm_Set_Bool(PROPVARIANT *p, bool b) throw()
40 {
41   p->vt = VT_BOOL;
42   p->boolVal = (b ? VARIANT_TRUE : VARIANT_FALSE);
43 }
44 
45 
46 class CPropVariant : public tagPROPVARIANT
47 {
48 public:
CPropVariant()49   CPropVariant()
50   {
51     vt = VT_EMPTY;
52     wReserved1 = 0;
53     // wReserved2 = 0;
54     // wReserved3 = 0;
55     // uhVal.QuadPart = 0;
56     bstrVal = 0;
57   }
throw()58   ~CPropVariant() throw() { Clear(); }
59   CPropVariant(const PROPVARIANT &varSrc);
60   CPropVariant(const CPropVariant &varSrc);
61   CPropVariant(BSTR bstrSrc);
62   CPropVariant(LPCOLESTR lpszSrc);
CPropVariant(bool bSrc)63   CPropVariant(bool bSrc) { vt = VT_BOOL; wReserved1 = 0; boolVal = (bSrc ? VARIANT_TRUE : VARIANT_FALSE); }
CPropVariant(Byte value)64   CPropVariant(Byte value) { vt = VT_UI1; wReserved1 = 0; bVal = value; }
65 
66 private:
67   CPropVariant(Int16 value); // { vt = VT_I2; wReserved1 = 0; iVal = value; }
68   CPropVariant(Int32 value); // { vt = VT_I4; wReserved1 = 0; lVal = value; }
69 
70 public:
CPropVariant(UInt32 value)71   CPropVariant(UInt32 value) { vt = VT_UI4; wReserved1 = 0; ulVal = value; }
CPropVariant(UInt64 value)72   CPropVariant(UInt64 value) { vt = VT_UI8; wReserved1 = 0; uhVal.QuadPart = value; }
CPropVariant(Int64 value)73   CPropVariant(Int64 value) { vt = VT_I8; wReserved1 = 0; hVal.QuadPart = value; }
CPropVariant(const FILETIME & value)74   CPropVariant(const FILETIME &value) { vt = VT_FILETIME; wReserved1 = 0; filetime = value; }
75 
76   CPropVariant& operator=(const CPropVariant &varSrc);
77   CPropVariant& operator=(const PROPVARIANT &varSrc);
78   CPropVariant& operator=(BSTR bstrSrc);
79   CPropVariant& operator=(LPCOLESTR lpszSrc);
80   CPropVariant& operator=(const UString &s);
81   CPropVariant& operator=(const UString2 &s);
82   CPropVariant& operator=(const char *s);
83   CPropVariant& operator=(const AString &s)
84     { return (*this)=(const char *)s; }
85 
86   CPropVariant& operator=(bool bSrc) throw();
87   CPropVariant& operator=(Byte value) throw();
88 
89 private:
90   CPropVariant& operator=(Int16 value) throw();
91 
92 public:
93   CPropVariant& operator=(Int32 value) throw();
94   CPropVariant& operator=(UInt32 value) throw();
95   CPropVariant& operator=(UInt64 value) throw();
96   CPropVariant& operator=(Int64 value) throw();
97   CPropVariant& operator=(const FILETIME &value) throw();
98 
99   BSTR AllocBstr(unsigned numChars);
100 
101   HRESULT Clear() throw();
102   HRESULT Copy(const PROPVARIANT *pSrc) throw();
103   HRESULT Attach(PROPVARIANT *pSrc) throw();
104   HRESULT Detach(PROPVARIANT *pDest) throw();
105 
106   HRESULT InternalClear() throw();
107   void InternalCopy(const PROPVARIANT *pSrc);
108 
109   int Compare(const CPropVariant &a) throw();
110 };
111 
112 }}
113 
114 #endif
115