comctl32/tests: Use CRT allocation functions.
[wine.git] / include / propvarutil.h
blob8bbe0c8fd151d055585298b3f3730c22560cb657
1 /*
2 * Copyright 2008 James Hawkins for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #ifndef __WINE_PROPVARUTIL_H
20 #define __WINE_PROPVARUTIL_H
22 #include <shtypes.h>
23 #include <shlwapi.h>
25 #ifndef WINE_NTSTATUS_DECLARED
26 #define WINE_NTSTATUS_DECLARED
27 typedef LONG NTSTATUS;
28 #endif
30 #ifndef PSSTDAPI
31 #ifdef _PROPSYS_
32 #define PSSTDAPI STDAPI
33 #define PSSTDAPI_(type) STDAPI_(type)
34 #else
35 #define PSSTDAPI DECLSPEC_IMPORT STDAPI
36 #define PSSTDAPI_(type) DECLSPEC_IMPORT STDAPI_(type)
37 #endif
38 #endif
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
44 enum tagPROPVAR_CHANGE_FLAGS
46 PVCHF_DEFAULT = 0x00000000,
47 PVCHF_NOVALUEPROP = 0x00000001,
48 PVCHF_ALPHABOOL = 0x00000002,
49 PVCHF_NOUSEROVERRIDE = 0x00000004,
50 PVCHF_LOCALBOOL = 0x00000008,
51 PVCHF_NOHEXSTRING = 0x00000010,
54 typedef int PROPVAR_CHANGE_FLAGS;
56 enum tagPROPVAR_COMPARE_UNIT
58 PVCU_DEFAULT = 0x00000000,
59 PVCU_SECOND = 0x00000001,
60 PVCU_MINUTE = 0x00000002,
61 PVCU_HOUR = 0x00000003,
62 PVCU_DAY = 0x00000004,
63 PVCU_MONTH = 0x00000005,
64 PVCU_YEAR = 0x00000006,
67 typedef int PROPVAR_COMPARE_UNIT;
69 enum tagPROPVAR_COMPARE_FLAGS
71 PVCF_DEFAULT = 0x00000000,
72 PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,
73 PVCF_USESTRCMP = 0x00000002,
74 PVCF_USESTRCMPC = 0x00000004,
75 PVCF_USESTRCMPI = 0x00000008,
76 PVCF_USESTRCMPIC = 0x00000010,
79 typedef int PROPVAR_COMPARE_FLAGS;
81 PSSTDAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
82 PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
83 PSSTDAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
84 PSSTDAPI InitVariantFromFileTime(const FILETIME *ft, VARIANT *var);
85 PSSTDAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
86 PSSTDAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
87 PSSTDAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar);
88 PSSTDAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
89 PSSTDAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
90 PSSTDAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
91 PSSTDAPI_(INT) PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
92 PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
93 PSSTDAPI InitPropVariantFromFileTime(const FILETIME *pftIn, PROPVARIANT *ppropvar);
94 PSSTDAPI InitPropVariantFromStringVector(PCWSTR *strs, ULONG count, PROPVARIANT *ppropvar);
96 PSSTDAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret);
97 PSSTDAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
98 PSSTDAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
99 PSSTDAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
100 PSSTDAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
101 PSSTDAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
102 PSSTDAPI_(ULONG) PropVariantToUInt32WithDefault(REFPROPVARIANT propvarIn, ULONG uLDefault);
103 PSSTDAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
104 PSSTDAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, BOOL *ret);
105 PSSTDAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb);
106 PSSTDAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch);
107 PSSTDAPI_(PCWSTR) PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);
108 PSSTDAPI_(PCWSTR) VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault);
109 PSSTDAPI VariantToString(REFVARIANT var, PWSTR ret, UINT cch);
111 PSSTDAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);
113 #ifdef __cplusplus
115 HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar);
116 HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar);
117 HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar);
118 HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar);
119 HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar);
120 HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);
121 HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar);
122 HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar);
123 HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);
124 HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar);
125 BOOL IsPropVariantVector(REFPROPVARIANT propvar);
126 BOOL IsPropVariantString(REFPROPVARIANT propvar);
128 #ifndef NO_PROPVAR_INLINES
130 inline HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar)
132 ppropvar->vt = VT_BOOL;
133 ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;
134 return S_OK;
137 inline HRESULT InitPropVariantFromInt16(SHORT nVal, PROPVARIANT *ppropvar)
139 ppropvar->vt = VT_I2;
140 ppropvar->iVal = nVal;
141 return S_OK;
144 inline HRESULT InitPropVariantFromUInt16(USHORT uiVal, PROPVARIANT *ppropvar)
146 ppropvar->vt = VT_UI2;
147 ppropvar->uiVal = uiVal;
148 return S_OK;
151 inline HRESULT InitPropVariantFromInt32(LONG lVal, PROPVARIANT *ppropvar)
153 ppropvar->vt = VT_I4;
154 ppropvar->lVal = lVal;
155 return S_OK;
158 inline HRESULT InitPropVariantFromUInt32(ULONG ulVal, PROPVARIANT *ppropvar)
160 ppropvar->vt = VT_UI4;
161 ppropvar->ulVal = ulVal;
162 return S_OK;
165 inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)
167 ppropvar->vt = VT_I8;
168 ppropvar->hVal.QuadPart = llVal;
169 return S_OK;
172 inline HRESULT InitPropVariantFromUInt64(ULONGLONG ullVal, PROPVARIANT *ppropvar)
174 ppropvar->vt = VT_UI8;
175 ppropvar->uhVal.QuadPart = ullVal;
176 return S_OK;
179 inline HRESULT InitPropVariantFromDouble(DOUBLE dblVal, PROPVARIANT *ppropvar)
181 ppropvar->vt = VT_R8;
182 ppropvar->dblVal = dblVal;
183 return S_OK;
186 inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)
188 HRESULT hres;
190 hres = SHStrDupW(psz, &ppropvar->pwszVal);
191 if(SUCCEEDED(hres))
192 ppropvar->vt = VT_LPWSTR;
193 else
194 PropVariantInit(ppropvar);
196 return hres;
199 inline HRESULT InitPropVariantFromGUIDAsBuffer(REFGUID guid, PROPVARIANT *ppropvar)
201 #ifdef __cplusplus
202 return InitPropVariantFromBuffer(&guid, sizeof(GUID), ppropvar);
203 #else
204 return InitPropVariantFromBuffer(guid, sizeof(GUID), ppropvar);
205 #endif
208 inline BOOL IsPropVariantVector(REFPROPVARIANT propvar)
210 return (propvar.vt & (VT_ARRAY | VT_VECTOR));
213 inline BOOL IsPropVariantString(REFPROPVARIANT propvar)
215 return (PropVariantToStringWithDefault(propvar, NULL) != NULL);
218 #endif /* NO_PROPVAR_INLINES */
219 #endif /* __cplusplus */
221 PSSTDAPI StgSerializePropVariant(const PROPVARIANT *ppropvar, SERIALIZEDPROPERTYVALUE **ppprop, ULONG *pcb);
222 PSSTDAPI StgDeserializePropVariant(const SERIALIZEDPROPERTYVALUE *pprop, ULONG cbmax, PROPVARIANT *ppropvar);
224 #ifdef __cplusplus
226 #endif
228 #endif /* __WINE_PROPVARUTIL_H */