Home | History | Annotate | Download | only in include
      1 /*
      2  * Copyright 2008 James Hawkins for CodeWeavers
      3  *
      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.
      8  *
      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.
     13  *
     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
     17  */
     18 
     19 #ifndef __WINE_PROPVARUTIL_H
     20 #define __WINE_PROPVARUTIL_H
     21 
     22 #include <shtypes.h>
     23 #include <shlwapi.h>
     24 
     25 enum tagPROPVAR_CHANGE_FLAGS
     26 {
     27     PVCHF_DEFAULT           = 0x00000000,
     28     PVCHF_NOVALUEPROP       = 0x00000001,
     29     PVCHF_ALPHABOOL         = 0x00000002,
     30     PVCHF_NOUSEROVERRIDE    = 0x00000004,
     31     PVCHF_LOCALBOOL         = 0x00000008,
     32     PVCHF_NOHEXSTRING       = 0x00000010,
     33 };
     34 
     35 typedef int PROPVAR_CHANGE_FLAGS;
     36 
     37 enum tagPROPVAR_COMPARE_UNIT
     38 {
     39     PVCU_DEFAULT           = 0x00000000,
     40     PVCU_SECOND            = 0x00000001,
     41     PVCU_MINUTE            = 0x00000002,
     42     PVCU_HOUR              = 0x00000003,
     43     PVCU_DAY               = 0x00000004,
     44     PVCU_MONTH             = 0x00000005,
     45     PVCU_YEAR              = 0x00000006,
     46 };
     47 
     48 typedef int PROPVAR_COMPARE_UNIT;
     49 
     50 enum tagPROPVAR_COMPARE_FLAGS
     51 {
     52     PVCF_DEFAULT           = 0x00000000,
     53     PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,
     54     PVCF_USESTRCMP         = 0x00000002,
     55     PVCF_USESTRCMPC        = 0x00000004,
     56     PVCF_USESTRCMPI        = 0x00000008,
     57     PVCF_USESTRCMPIC       = 0x00000010,
     58 };
     59 
     60 typedef int PROPVAR_COMPARE_FLAGS;
     61 
     62 HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
     63                                      PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
     64 HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
     65 HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
     66 HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
     67 HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
     68 HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
     69 HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
     70 INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
     71                                 PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
     72 
     73 HRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
     74 HRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
     75 HRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
     76 HRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
     77 HRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
     78 HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
     79 
     80 #ifdef __cplusplus
     81 
     82 HRESULT InitPropVariantFromBoolean(WINBOOL fVal, PROPVARIANT *ppropvar);
     83 HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);
     84 HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);
     85 
     86 #ifndef NO_PROPVAR_INLINES
     87 
     88 inline HRESULT InitPropVariantFromBoolean(WINBOOL fVal, PROPVARIANT *ppropvar)
     89 {
     90     ppropvar->vt = VT_BOOL;
     91     ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;
     92     return S_OK;
     93 }
     94 
     95 inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)
     96 {
     97     HRESULT hres;
     98 
     99     hres = SHStrDupW(psz, &ppropvar->pwszVal);
    100     if(SUCCEEDED(hres))
    101         ppropvar->vt = VT_LPWSTR;
    102     else
    103         PropVariantInit(ppropvar);
    104 
    105     return hres;
    106 }
    107 
    108 inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)
    109 {
    110     ppropvar->vt = VT_I8;
    111     ppropvar->hVal.QuadPart = llVal;
    112     return S_OK;
    113 }
    114 
    115 #endif
    116 #endif
    117 
    118 #endif /* __WINE_PROPVARUTIL_H */
    119