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