Reactos
at master 1079 lines 37 kB view raw
1/* 2 * Copyright (C) the Wine project 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_OLEAUTO_H 20#define __WINE_OLEAUTO_H 21 22#include <oaidl.h> 23 24#ifdef __cplusplus 25extern "C" { 26#endif 27 28DEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0); 29 30#define STDOLE_MAJORVERNUM 1 31#define STDOLE_MINORVERNUM 0 32#define STDOLE_LCID 0 33 34#define STDOLE2_MAJORVERNUM 2 35#define STDOLE2_MINORVERNUM 0 36#define STDOLE2_LCID 0 37 38ULONG WINAPI OaBuildVersion(void); 39 40/* BSTR functions */ 41BSTR WINAPI SysAllocString(_In_opt_z_ const OLECHAR*); 42BSTR WINAPI SysAllocStringByteLen(_In_opt_z_ LPCSTR, _In_ UINT); 43 44_Ret_writes_maybenull_z_(ui + 1) 45BSTR 46WINAPI 47SysAllocStringLen( 48 _In_reads_opt_(ui) const OLECHAR*, 49 UINT ui); 50 51void WINAPI SysFreeString(_In_opt_ BSTR); 52 53INT 54WINAPI 55SysReAllocString( 56 _Inout_ _At_(*pbstr, _Pre_z_ _Post_z_ _Post_readable_size_(_String_length_(psz) + 1)) LPBSTR pbstr, 57 _In_opt_z_ const OLECHAR *psz); 58 59_Check_return_ 60int 61WINAPI 62SysReAllocStringLen( 63 _Inout_ _At_(*pbstr, _Pre_z_ _Post_z_ _Post_readable_size_(len + 1)) BSTR *pbstr, 64 _In_opt_z_ const OLECHAR*, 65 _In_ UINT len); 66 67_Post_equal_to_(_String_length_(bstr) * sizeof(OLECHAR)) 68UINT 69WINAPI 70SysStringByteLen( 71 _In_opt_ BSTR bstr); 72 73_Post_equal_to_(pbstr == NULL ? 0 : _String_length_(pbstr)) 74UINT 75WINAPI 76SysStringLen( 77 _In_opt_ BSTR pbstr); 78 79/* IErrorInfo helpers */ 80HRESULT WINAPI SetErrorInfo(_In_ ULONG, _In_opt_ IErrorInfo*); 81_Check_return_ HRESULT WINAPI GetErrorInfo(_In_ ULONG, _Outptr_ IErrorInfo**); 82_Check_return_ HRESULT WINAPI CreateErrorInfo(_Outptr_ ICreateErrorInfo**); 83 84/* SafeArray functions */ 85 86SAFEARRAY* 87WINAPI 88SafeArrayCreate( 89 _In_ VARTYPE, 90 _In_ UINT, 91 _In_ SAFEARRAYBOUND*); 92 93SAFEARRAY* 94WINAPI 95SafeArrayCreateEx( 96 _In_ VARTYPE, 97 _In_ UINT, 98 _In_ SAFEARRAYBOUND*, 99 _In_ LPVOID); 100 101SAFEARRAY* 102WINAPI 103SafeArrayCreateVector( 104 _In_ VARTYPE, 105 _In_ LONG, 106 _In_ ULONG); 107 108SAFEARRAY* 109WINAPI 110SafeArrayCreateVectorEx( 111 _In_ VARTYPE, 112 _In_ LONG, 113 _In_ ULONG, 114 _In_ LPVOID); 115 116HRESULT WINAPI SafeArrayAllocDescriptor(_In_ UINT, _Outptr_ SAFEARRAY**); 117 118HRESULT 119WINAPI 120SafeArrayAllocDescriptorEx( 121 _In_ VARTYPE, 122 _In_ UINT, 123 _Outptr_ SAFEARRAY**); 124 125HRESULT WINAPI SafeArrayAllocData(_In_ SAFEARRAY*); 126HRESULT WINAPI SafeArrayDestroyDescriptor(_In_ SAFEARRAY*); 127 128_Check_return_ 129HRESULT 130WINAPI 131SafeArrayPutElement( 132 _In_ SAFEARRAY*, 133 LONG*, 134 _In_ void*); 135 136HRESULT WINAPI SafeArrayGetElement(_In_ SAFEARRAY*, LONG*, _Out_ void*); 137HRESULT WINAPI SafeArrayLock(_In_ SAFEARRAY*); 138HRESULT WINAPI SafeArrayUnlock(_In_ SAFEARRAY*); 139HRESULT WINAPI SafeArrayGetUBound(_In_ SAFEARRAY*, _In_ UINT, _Out_ LONG*); 140HRESULT WINAPI SafeArrayGetLBound(_In_ SAFEARRAY*, _In_ UINT, _Out_ LONG*); 141UINT WINAPI SafeArrayGetDim(_In_ SAFEARRAY*); 142UINT WINAPI SafeArrayGetElemsize(_In_ SAFEARRAY*); 143HRESULT WINAPI SafeArrayGetVartype(_In_ SAFEARRAY*, _Out_ VARTYPE*); 144HRESULT WINAPI SafeArrayAccessData(_In_ SAFEARRAY*, void**); 145HRESULT WINAPI SafeArrayUnaccessData(_In_ SAFEARRAY*); 146 147HRESULT 148WINAPI 149SafeArrayPtrOfIndex( 150 _In_ SAFEARRAY *psa, 151 _In_reads_(psa->cDims) LONG*, 152 _Outptr_result_bytebuffer_(psa->cbElements) void **); 153 154_Check_return_ 155HRESULT 156WINAPI 157SafeArrayCopyData( 158 _In_ SAFEARRAY*, 159 _In_ SAFEARRAY*); 160 161HRESULT WINAPI SafeArrayDestroyData(_In_ SAFEARRAY*); 162HRESULT WINAPI SafeArrayDestroy(_In_ SAFEARRAY*); 163 164_Check_return_ 165HRESULT 166WINAPI 167SafeArrayCopy( 168 _In_ SAFEARRAY*, 169 _Outptr_ SAFEARRAY**); 170 171HRESULT WINAPI SafeArrayRedim(_Inout_ SAFEARRAY*, _In_ SAFEARRAYBOUND*); 172HRESULT WINAPI SafeArraySetRecordInfo(_In_ SAFEARRAY*, _In_ IRecordInfo*); 173HRESULT WINAPI SafeArrayGetRecordInfo(_In_ SAFEARRAY*, _Outptr_ IRecordInfo**); 174HRESULT WINAPI SafeArraySetIID(_In_ SAFEARRAY*, _In_ REFGUID); 175HRESULT WINAPI SafeArrayGetIID(_In_ SAFEARRAY*, _Out_ GUID*); 176 177_Check_return_ HRESULT WINAPI VectorFromBstr(_In_ BSTR, _Outptr_ SAFEARRAY**); 178_Check_return_ HRESULT WINAPI BstrFromVector(_In_ SAFEARRAY*, _Out_ BSTR*); 179 180/* Object registration helpers */ 181#define ACTIVEOBJECT_STRONG 0 182#define ACTIVEOBJECT_WEAK 1 183 184_Check_return_ 185HRESULT 186WINAPI 187RegisterActiveObject( 188 LPUNKNOWN, 189 REFCLSID, 190 DWORD, 191 LPDWORD); 192 193HRESULT WINAPI RevokeActiveObject(DWORD,LPVOID); 194HRESULT WINAPI GetActiveObject(REFCLSID,LPVOID,LPUNKNOWN*); 195 196/* IRecordInfo helpers */ 197HRESULT WINAPI GetRecordInfoFromTypeInfo(ITypeInfo*,IRecordInfo**); 198HRESULT WINAPI GetRecordInfoFromGuids(REFGUID,ULONG,ULONG,LCID,REFGUID,IRecordInfo**); 199 200/* 201 * Variants 202 */ 203 204/* Macros for accessing the fields of the VARIANT type */ 205#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) 206#define V_VT(A) ((A)->n1.n2.vt) 207#define V_UNION(A,B) ((A)->n1.n2.n3.B) 208#define V_RECORD(A) (V_UNION(A,brecVal).pvRecord) 209#define V_RECORDINFO(A) (V_UNION(A,brecVal).pRecInfo) 210#else 211#define V_VT(A) ((A)->vt) 212#define V_UNION(A,B) ((A)->B) 213#define V_RECORD(A) ((A)->pvRecord) 214#define V_RECORDINFO(A) ((A)->pRecInfo) 215#endif 216 217#define V_ISBYREF(A) (V_VT(A) & VT_BYREF) 218#define V_ISARRAY(A) (V_VT(A) & VT_ARRAY) 219#define V_ISVECTOR(A) (V_VT(A) & VT_VECTOR) 220#define V_NONE(A) V_I2(A) 221 222#define V_ARRAY(A) V_UNION(A,parray) 223#define V_ARRAYREF(A) V_UNION(A,pparray) 224#define V_BOOL(A) V_UNION(A,boolVal) 225#define V_BOOLREF(A) V_UNION(A,pboolVal) 226#define V_BSTR(A) V_UNION(A,bstrVal) 227#define V_BSTRREF(A) V_UNION(A,pbstrVal) 228#define V_BYREF(A) V_UNION(A,byref) 229#define V_CY(A) V_UNION(A,cyVal) 230#define V_CYREF(A) V_UNION(A,pcyVal) 231#define V_DATE(A) V_UNION(A,date) 232#define V_DATEREF(A) V_UNION(A,pdate) 233#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) 234#define V_DECIMAL(A) ((A)->n1.decVal) 235#else 236#define V_DECIMAL(A) ((A)->decVal) 237#endif 238#define V_DECIMALREF(A) V_UNION(A,pdecVal) 239#define V_DISPATCH(A) V_UNION(A,pdispVal) 240#define V_DISPATCHREF(A) V_UNION(A,ppdispVal) 241#define V_ERROR(A) V_UNION(A,scode) 242#define V_ERRORREF(A) V_UNION(A,pscode) 243#define V_I1(A) V_UNION(A,cVal) 244#define V_I1REF(A) V_UNION(A,pcVal) 245#define V_I2(A) V_UNION(A,iVal) 246#define V_I2REF(A) V_UNION(A,piVal) 247#define V_I4(A) V_UNION(A,lVal) 248#define V_I4REF(A) V_UNION(A,plVal) 249#define V_I8(A) V_UNION(A,llVal) 250#define V_I8REF(A) V_UNION(A,pllVal) 251#define V_INT(A) V_UNION(A,intVal) 252#define V_INTREF(A) V_UNION(A,pintVal) 253#ifdef _WIN64 254#define V_INT_PTR(A) V_I8(A) 255#define V_INT_PTRREF(A) V_I8REF(A) 256#else 257#define V_INT_PTR(A) V_I4(A) 258#define V_INT_PTRREF(A) V_I4REF(A) 259#endif 260#define V_R4(A) V_UNION(A,fltVal) 261#define V_R4REF(A) V_UNION(A,pfltVal) 262#define V_R8(A) V_UNION(A,dblVal) 263#define V_R8REF(A) V_UNION(A,pdblVal) 264#define V_UINT(A) V_UNION(A,uintVal) 265#define V_UINTREF(A) V_UNION(A,puintVal) 266#define V_UI1(A) V_UNION(A,bVal) 267#define V_UI1REF(A) V_UNION(A,pbVal) 268#define V_UI2(A) V_UNION(A,uiVal) 269#define V_UI2REF(A) V_UNION(A,puiVal) 270#define V_UI4(A) V_UNION(A,ulVal) 271#define V_UI4REF(A) V_UNION(A,pulVal) 272#define V_UI8(A) V_UNION(A,ullVal) 273#define V_UI8REF(A) V_UNION(A,pullVal) 274#ifdef _WIN64 275#define V_UINT_PTR(A) V_UI8(A) 276#define V_UINT_PTRREF(A) V_UI8REF(A) 277#else 278#define V_UINT_PTR(A) V_UI4(A) 279#define V_UINT_PTRREF(A) V_UI4REF(A) 280#endif 281#define V_UNKNOWN(A) V_UNION(A,punkVal) 282#define V_UNKNOWNREF(A) V_UNION(A,ppunkVal) 283#define V_VARIANTREF(A) V_UNION(A,pvarVal) 284 285void WINAPI VariantInit(_Out_ VARIANT*); 286HRESULT WINAPI VariantClear(_Inout_ VARIANT*); 287_Check_return_ HRESULT WINAPI VariantCopy(_Inout_ VARIANT*, _In_ VARIANT*); 288_Check_return_ HRESULT WINAPI VariantCopyInd(_Inout_ VARIANT*, _In_ VARIANT*); 289 290_Check_return_ 291HRESULT 292WINAPI 293VariantChangeType( 294 _Inout_ VARIANT*, 295 _In_ VARIANT*, 296 _In_ USHORT, 297 _In_ VARTYPE); 298 299_Check_return_ 300HRESULT 301WINAPI 302VariantChangeTypeEx( 303 _Inout_ VARIANT*, 304 _In_ VARIANT*, 305 _In_ LCID, 306 _In_ USHORT, 307 _In_ VARTYPE); 308 309/* VariantChangeType/VariantChangeTypeEx flags */ 310#define VARIANT_NOVALUEPROP 0x01 /* Don't get the default value property from IDispatch */ 311#define VARIANT_ALPHABOOL 0x02 /* Coerce to "True"|"False" instead of "-1"|"0" */ 312#define VARIANT_NOUSEROVERRIDE 0x04 /* Pass LOCALE_NOUSEROVERRIDE to low level conversions */ 313#define VARIANT_CALENDAR_HIJRI 0x08 /* Use the Hijri calendar */ 314#define VARIANT_LOCALBOOL 0x10 /* Like VARIANT_ALPHABOOL, but use localised text */ 315#define VARIANT_CALENDAR_THAI 0x20 /* Use the Thai buddhist calendar */ 316#define VARIANT_CALENDAR_GREGORIAN 0x40 /* Use the Gregorian calendar */ 317#define VARIANT_USE_NLS 0x80 /* Format result using NLS calls */ 318 319/* 320 * Low level Variant coercion functions 321 */ 322 323#define VT_HARDTYPE VT_RESERVED /* Don't coerce this variant when comparing it to others */ 324 325/* Flags for low level coercions. LOCALE_ flags can also be passed */ 326#define VAR_TIMEVALUEONLY 0x001 /* Ignore date portion of VT_DATE */ 327#define VAR_DATEVALUEONLY 0x002 /* Ignore time portion of VT_DATE */ 328#define VAR_VALIDDATE 0x004 329#define VAR_CALENDAR_HIJRI 0x008 /* Use the Hijri calendar */ 330#define VAR_LOCALBOOL 0x010 /* VT_BOOL<->VT_BSTR: Use localised boolean text */ 331#define VAR_FORMAT_NOSUBSTITUTE 0x020 /* Don't change format strings for un-coercable types */ 332#define VAR_FOURDIGITYEARS 0x040 /* Always print years with 4 digits */ 333#define VAR_CALENDAR_THAI 0x080 /* Use the Thai buddhist calendar */ 334#define VAR_CALENDAR_GREGORIAN 0x100 /* Use the Gregorian calendar */ 335 336#ifndef LOCALE_USE_NLS 337/* This is missing from native winnls.h, but may be added at some point */ 338#define LOCALE_USE_NLS 0x10000000 339#endif 340 341#define VTDATEGRE_MIN -657434 /* Minimum possible Gregorian date: 1/1/100 */ 342#define VTDATEGRE_MAX 2958465 /* Maximum possible Gregorian date: 31/12/9999 */ 343 344HRESULT WINAPI VarUI1FromI2(SHORT, _Out_ BYTE*); 345HRESULT WINAPI VarUI1FromI4(LONG, _Out_ BYTE*); 346HRESULT WINAPI VarUI1FromI8(LONG64, _Out_ BYTE*); 347HRESULT WINAPI VarUI1FromR4(FLOAT, _Out_ BYTE*); 348HRESULT WINAPI VarUI1FromR8(DOUBLE, _Out_ BYTE*); 349HRESULT WINAPI VarUI1FromDate(DATE, _Out_ BYTE*); 350HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL, _Out_ BYTE*); 351HRESULT WINAPI VarUI1FromI1(signed char, _Out_ BYTE*); 352HRESULT WINAPI VarUI1FromUI2(USHORT, _Out_ BYTE*); 353HRESULT WINAPI VarUI1FromUI4(ULONG, _Out_ BYTE*); 354HRESULT WINAPI VarUI1FromUI8(ULONG64, _Out_ BYTE*); 355HRESULT WINAPI VarUI1FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ BYTE*); 356HRESULT WINAPI VarUI1FromCy(CY, _Out_ BYTE*); 357HRESULT WINAPI VarUI1FromDec(_In_ DECIMAL*, _Out_ BYTE*); 358HRESULT WINAPI VarUI1FromDisp(IDispatch*, LCID, _Out_ BYTE*); 359 360HRESULT WINAPI VarI2FromUI1(BYTE, _Out_ SHORT*); 361HRESULT WINAPI VarI2FromI4(LONG, _Out_ SHORT*); 362HRESULT WINAPI VarI2FromI8(LONG64, _Out_ SHORT*); 363HRESULT WINAPI VarI2FromR4(FLOAT, _Out_ SHORT*); 364HRESULT WINAPI VarI2FromR8(DOUBLE, _Out_ SHORT*); 365HRESULT WINAPI VarI2FromDate(DATE, _Out_ SHORT*); 366HRESULT WINAPI VarI2FromBool(VARIANT_BOOL, _Out_ SHORT*); 367HRESULT WINAPI VarI2FromI1(signed char, _Out_ SHORT*); 368HRESULT WINAPI VarI2FromUI2(USHORT, _Out_ SHORT*); 369HRESULT WINAPI VarI2FromUI4(ULONG, _Out_ SHORT*); 370HRESULT WINAPI VarI2FromUI8(ULONG64, _Out_ SHORT*); 371HRESULT WINAPI VarI2FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ SHORT*); 372HRESULT WINAPI VarI2FromCy(CY,SHORT*); 373HRESULT WINAPI VarI2FromDec(_In_ DECIMAL*, _Out_ SHORT*); 374HRESULT WINAPI VarI2FromDisp(IDispatch*, LCID, _Out_ SHORT*); 375 376HRESULT WINAPI VarI4FromUI1(BYTE, _Out_ LONG*); 377HRESULT WINAPI VarI4FromI2(SHORT, _Out_ LONG*); 378HRESULT WINAPI VarI4FromI8(LONG64, _Out_ LONG*); 379HRESULT WINAPI VarI4FromR4(FLOAT, _Out_ LONG*); 380HRESULT WINAPI VarI4FromR8(DOUBLE, _Out_ LONG*); 381HRESULT WINAPI VarI4FromDate(DATE, _Out_ LONG*); 382HRESULT WINAPI VarI4FromBool(VARIANT_BOOL, _Out_ LONG*); 383HRESULT WINAPI VarI4FromI1(signed char, _Out_ LONG*); 384HRESULT WINAPI VarI4FromUI2(USHORT, _Out_ LONG*); 385HRESULT WINAPI VarI4FromUI4(ULONG, _Out_ LONG*); 386HRESULT WINAPI VarI4FromUI8(ULONG64, _Out_ LONG*); 387HRESULT WINAPI VarI4FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ LONG*); 388HRESULT WINAPI VarI4FromCy(CY, _Out_ LONG*); 389HRESULT WINAPI VarI4FromDec(_In_ DECIMAL*, _Out_ LONG*); 390HRESULT WINAPI VarI4FromDisp(IDispatch*, _In_ LCID, _Out_ LONG*); 391 392HRESULT WINAPI VarI8FromUI1(BYTE, _Out_ LONG64*); 393HRESULT WINAPI VarI8FromI2(SHORT, _Out_ LONG64*); 394HRESULT WINAPI VarI8FromI4(LONG,LONG64*); 395HRESULT WINAPI VarI8FromR4(FLOAT, _Out_ LONG64*); 396HRESULT WINAPI VarI8FromR8(DOUBLE, _Out_ LONG64*); 397HRESULT WINAPI VarI8FromDate(DATE, _Out_ LONG64*); 398HRESULT WINAPI VarI8FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ LONG64*); 399HRESULT WINAPI VarI8FromBool(VARIANT_BOOL, _Out_ LONG64*); 400HRESULT WINAPI VarI8FromI1(signed char, _Out_ LONG64*); 401HRESULT WINAPI VarI8FromUI2(USHORT, _Out_ LONG64*); 402HRESULT WINAPI VarI8FromUI4(ULONG, _Out_ LONG64*); 403HRESULT WINAPI VarI8FromUI8(ULONG64, _Out_ LONG64*); 404HRESULT WINAPI VarI8FromDec(_In_ DECIMAL *pdecIn, _Out_ LONG64*); 405HRESULT WINAPI VarI8FromInt(INT intIn,LONG64*); 406HRESULT WINAPI VarI8FromCy(_In_ CY, _Out_ LONG64*); 407HRESULT WINAPI VarI8FromDisp(IDispatch*, _In_ LCID, _Out_ LONG64*); 408 409HRESULT WINAPI VarR4FromUI1(BYTE, _Out_ FLOAT*); 410HRESULT WINAPI VarR4FromI2(SHORT, _Out_ FLOAT*); 411HRESULT WINAPI VarR4FromI4(LONG, _Out_ FLOAT*); 412HRESULT WINAPI VarR4FromI8(LONG64, _Out_ FLOAT*); 413HRESULT WINAPI VarR4FromR8(DOUBLE, _Out_ FLOAT*); 414HRESULT WINAPI VarR4FromDate(DATE, _Out_ FLOAT*); 415HRESULT WINAPI VarR4FromBool(VARIANT_BOOL, _Out_ FLOAT*); 416HRESULT WINAPI VarR4FromI1(signed char, _Out_ FLOAT*); 417HRESULT WINAPI VarR4FromUI2(USHORT, _Out_ FLOAT*); 418HRESULT WINAPI VarR4FromUI4(ULONG, _Out_ FLOAT*); 419HRESULT WINAPI VarR4FromUI8(ULONG64, _Out_ FLOAT*); 420HRESULT WINAPI VarR4FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ FLOAT*); 421HRESULT WINAPI VarR4FromCy(CY,FLOAT*); 422HRESULT WINAPI VarR4FromDec(_In_ DECIMAL*, _Out_ FLOAT*); 423HRESULT WINAPI VarR4FromDisp(IDispatch*, LCID, _Out_ FLOAT*); 424 425HRESULT WINAPI VarR8FromUI1(BYTE, _Out_ double*); 426HRESULT WINAPI VarR8FromI2(SHORT, _Out_ double*); 427HRESULT WINAPI VarR8FromI4(LONG, _Out_ double*); 428HRESULT WINAPI VarR8FromI8(LONG64, _Out_ double*); 429HRESULT WINAPI VarR8FromR4(FLOAT, _Out_ double*); 430HRESULT WINAPI VarR8FromDate(DATE, _Out_ double*); 431HRESULT WINAPI VarR8FromBool(VARIANT_BOOL, _Out_ double*); 432HRESULT WINAPI VarR8FromI1(signed char,double*); 433HRESULT WINAPI VarR8FromUI2(USHORT, _Out_ double*); 434HRESULT WINAPI VarR8FromUI4(ULONG, _Out_ double*); 435HRESULT WINAPI VarR8FromUI8(ULONG64, _Out_ double*); 436HRESULT WINAPI VarR8FromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ double*); 437HRESULT WINAPI VarR8FromCy(CY,double*); 438HRESULT WINAPI VarR8FromDec(_In_ const DECIMAL*, _Out_ double*); 439HRESULT WINAPI VarR8FromDisp(IDispatch*, LCID, _Out_ double*); 440 441HRESULT WINAPI VarDateFromUI1(BYTE, _Out_ DATE*); 442HRESULT WINAPI VarDateFromI2(SHORT, _Out_ DATE*); 443HRESULT WINAPI VarDateFromI4(LONG, _Out_ DATE*); 444HRESULT WINAPI VarDateFromI8(LONG64, _Out_ DATE*); 445HRESULT WINAPI VarDateFromR4(FLOAT, _Out_ DATE*); 446HRESULT WINAPI VarDateFromR8(DOUBLE, _Out_ DATE*); 447HRESULT WINAPI VarDateFromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ DATE*); 448HRESULT WINAPI VarDateFromI1(signed char, _Out_ DATE*); 449HRESULT WINAPI VarDateFromUI2(USHORT, _Out_ DATE*); 450HRESULT WINAPI VarDateFromUI4(ULONG, _Out_ DATE*); 451HRESULT WINAPI VarDateFromUI8(ULONG64, _Out_ DATE*); 452HRESULT WINAPI VarDateFromBool(VARIANT_BOOL, _Out_ DATE*); 453HRESULT WINAPI VarDateFromCy(CY, _Out_ DATE*); 454HRESULT WINAPI VarDateFromDec(_In_ DECIMAL*, _Out_ DATE*); 455HRESULT WINAPI VarDateFromDisp(IDispatch*, LCID, _Out_ DATE*); 456 457HRESULT WINAPI VarCyFromUI1(BYTE, _Out_ CY*); 458HRESULT WINAPI VarCyFromI2(SHORT sIn, _Out_ CY*); 459HRESULT WINAPI VarCyFromI4(LONG, _Out_ CY*); 460HRESULT WINAPI VarCyFromI8(LONG64, _Out_ CY*); 461HRESULT WINAPI VarCyFromR4(FLOAT, _Out_ CY*); 462HRESULT WINAPI VarCyFromR8(DOUBLE, _Out_ CY*); 463HRESULT WINAPI VarCyFromDate(DATE, _Out_ CY*); 464HRESULT WINAPI VarCyFromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ CY*); 465HRESULT WINAPI VarCyFromBool(VARIANT_BOOL, _Out_ CY*); 466HRESULT WINAPI VarCyFromI1(signed char, _Out_ CY*); 467HRESULT WINAPI VarCyFromUI2(USHORT, _Out_ CY*); 468HRESULT WINAPI VarCyFromUI4(ULONG, _Out_ CY*); 469HRESULT WINAPI VarCyFromUI8(ULONG64, _Out_ CY*); 470HRESULT WINAPI VarCyFromDec(_In_ DECIMAL*, _Out_ CY*); 471HRESULT WINAPI VarCyFromDisp(_In_ IDispatch*, LCID, _Out_ CY*); 472 473HRESULT WINAPI VarBstrFromUI1(BYTE, LCID, ULONG, _Out_ BSTR*); 474HRESULT WINAPI VarBstrFromI2(SHORT,LCID,ULONG,BSTR*); 475HRESULT WINAPI VarBstrFromI4(LONG, LCID, ULONG, _Out_ BSTR*); 476HRESULT WINAPI VarBstrFromI8(LONG64, LCID, ULONG, _Out_ BSTR*); 477HRESULT WINAPI VarBstrFromR4(FLOAT, LCID, ULONG, _Out_ BSTR*); 478HRESULT WINAPI VarBstrFromR8(DOUBLE, LCID, ULONG, _Out_ BSTR*); 479HRESULT WINAPI VarBstrFromDate(_In_ DATE, _In_ LCID, _In_ ULONG, _Out_ BSTR*); 480HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL, LCID, ULONG, _Out_ BSTR*); 481HRESULT WINAPI VarBstrFromI1(signed char, LCID, ULONG, _Out_ BSTR*); 482HRESULT WINAPI VarBstrFromUI2(USHORT, LCID, ULONG, _Out_ BSTR*); 483HRESULT WINAPI VarBstrFromUI8(ULONG64, LCID, ULONG, _Out_ BSTR*); 484HRESULT WINAPI VarBstrFromUI4(ULONG, LCID, ULONG, _Out_ BSTR*); 485HRESULT WINAPI VarBstrFromCy(CY, LCID, ULONG, _Out_ BSTR*); 486HRESULT WINAPI VarBstrFromDec(_In_ DECIMAL*, _In_ LCID, _In_ ULONG, _Out_ BSTR*); 487HRESULT WINAPI VarBstrFromDisp(IDispatch*, LCID, ULONG, _Out_ BSTR*); 488 489HRESULT WINAPI VarBoolFromUI1(BYTE, _Out_ VARIANT_BOOL*); 490_Check_return_ HRESULT WINAPI VarBoolFromI2(_In_ SHORT, _Out_ VARIANT_BOOL*); 491HRESULT WINAPI VarBoolFromI4(LONG, _Out_ VARIANT_BOOL*); 492HRESULT WINAPI VarBoolFromI8(LONG64, _Out_ VARIANT_BOOL*); 493HRESULT WINAPI VarBoolFromR4(FLOAT, _Out_ VARIANT_BOOL*); 494HRESULT WINAPI VarBoolFromR8(DOUBLE, _Out_ VARIANT_BOOL*); 495HRESULT WINAPI VarBoolFromDate(DATE, _Out_ VARIANT_BOOL*); 496HRESULT WINAPI VarBoolFromStr(_In_ OLECHAR*, LCID, ULONG, _Out_ VARIANT_BOOL*); 497HRESULT WINAPI VarBoolFromI1(signed char, _Out_ VARIANT_BOOL*); 498HRESULT WINAPI VarBoolFromUI2(USHORT, _Out_ VARIANT_BOOL*); 499HRESULT WINAPI VarBoolFromUI4(ULONG, _Out_ VARIANT_BOOL*); 500HRESULT WINAPI VarBoolFromUI8(ULONG64, _Out_ VARIANT_BOOL*); 501HRESULT WINAPI VarBoolFromCy(CY, _Out_ VARIANT_BOOL*); 502HRESULT WINAPI VarBoolFromDec(_In_ DECIMAL*, _Out_ VARIANT_BOOL*); 503HRESULT WINAPI VarBoolFromDisp(IDispatch*, LCID, _Out_ VARIANT_BOOL*); 504 505HRESULT WINAPI VarI1FromUI1(_In_ BYTE, _Out_ signed char*); 506HRESULT WINAPI VarI1FromI2(_In_ SHORT, _Out_ signed char*); 507HRESULT WINAPI VarI1FromI4(_In_ LONG, _Out_ signed char*); 508HRESULT WINAPI VarI1FromI8(_In_ LONG64, _Out_ signed char*); 509HRESULT WINAPI VarI1FromR4(_In_ FLOAT, _Out_ signed char*); 510HRESULT WINAPI VarI1FromR8(_In_ DOUBLE, _Out_ signed char*); 511HRESULT WINAPI VarI1FromDate(_In_ DATE, _Out_ signed char*); 512HRESULT WINAPI VarI1FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ signed char*); 513HRESULT WINAPI VarI1FromBool(_In_ VARIANT_BOOL, _Out_ signed char*); 514HRESULT WINAPI VarI1FromUI2(_In_ USHORT, _Out_ signed char*); 515HRESULT WINAPI VarI1FromUI4(_In_ ULONG, _Out_ signed char*); 516HRESULT WINAPI VarI1FromUI8(_In_ ULONG64, _Out_ signed char*); 517HRESULT WINAPI VarI1FromCy(_In_ CY, _Out_ signed char*); 518HRESULT WINAPI VarI1FromDec(_In_ DECIMAL*, _Out_ signed char*); 519HRESULT WINAPI VarI1FromDisp(_In_ IDispatch*, _In_ LCID, _Out_ signed char*); 520 521HRESULT WINAPI VarUI2FromUI1(BYTE, _Out_ USHORT*); 522HRESULT WINAPI VarUI2FromI2(SHORT, _Out_ USHORT*); 523HRESULT WINAPI VarUI2FromI4(LONG, _Out_ USHORT*); 524HRESULT WINAPI VarUI2FromI8(LONG64, _Out_ USHORT*); 525HRESULT WINAPI VarUI2FromR4(FLOAT, _Out_ USHORT*); 526HRESULT WINAPI VarUI2FromR8(DOUBLE,USHORT*); 527HRESULT WINAPI VarUI2FromDate(DATE, _Out_ USHORT*); 528HRESULT WINAPI VarUI2FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ USHORT*); 529HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL, _Out_ USHORT*); 530HRESULT WINAPI VarUI2FromI1(signed char, _Out_ USHORT*); 531HRESULT WINAPI VarUI2FromUI4(ULONG, _Out_ USHORT*); 532HRESULT WINAPI VarUI2FromUI8(ULONG64, _Out_ USHORT*); 533HRESULT WINAPI VarUI2FromCy(CY, _Out_ USHORT*); 534HRESULT WINAPI VarUI2FromDec(_In_ DECIMAL*, _Out_ USHORT*); 535HRESULT WINAPI VarUI2FromDisp(_In_ IDispatch*, LCID, _Out_ USHORT*); 536 537HRESULT WINAPI VarUI4FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ ULONG*); 538HRESULT WINAPI VarUI4FromUI1(BYTE, _Out_ ULONG*); 539HRESULT WINAPI VarUI4FromI2(_In_ SHORT, _Out_ ULONG*); 540HRESULT WINAPI VarUI4FromI4(LONG, _Out_ ULONG*); 541HRESULT WINAPI VarUI4FromI8(LONG64, _Out_ ULONG*); 542HRESULT WINAPI VarUI4FromR4(FLOAT, _Out_ ULONG*); 543HRESULT WINAPI VarUI4FromR8(DOUBLE, _Out_ ULONG*); 544HRESULT WINAPI VarUI4FromDate(DATE, _Out_ ULONG*); 545HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL, _Out_ ULONG*); 546HRESULT WINAPI VarUI4FromI1(signed char, _Out_ ULONG*); 547HRESULT WINAPI VarUI4FromUI2(USHORT, _Out_ ULONG*); 548HRESULT WINAPI VarUI4FromUI8(ULONG64, _Out_ ULONG*); 549HRESULT WINAPI VarUI4FromCy(CY, _Out_ ULONG*); 550HRESULT WINAPI VarUI4FromDec(_In_ DECIMAL*, _Out_ ULONG*); 551HRESULT WINAPI VarUI4FromDisp(_In_ IDispatch*, LCID, _Out_ ULONG*); 552 553HRESULT WINAPI VarUI8FromUI1(BYTE, _Out_ ULONG64*); 554HRESULT WINAPI VarUI8FromI2(SHORT, _Out_ ULONG64*); 555HRESULT WINAPI VarUI8FromI4(LONG, _Out_ ULONG64*); 556HRESULT WINAPI VarUI8FromI8(LONG64, _Out_ ULONG64*); 557HRESULT WINAPI VarUI8FromR4(FLOAT, _Out_ ULONG64*); 558HRESULT WINAPI VarUI8FromR8(DOUBLE, _Out_ ULONG64*); 559HRESULT WINAPI VarUI8FromDate(DATE, _Out_ ULONG64*); 560HRESULT WINAPI VarUI8FromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ ULONG64*); 561HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL, _Out_ ULONG64*); 562HRESULT WINAPI VarUI8FromI1(signed char, _Out_ ULONG64*); 563HRESULT WINAPI VarUI8FromUI2(USHORT, _Out_ ULONG64*); 564HRESULT WINAPI VarUI8FromUI4(ULONG, _Out_ ULONG64*); 565HRESULT WINAPI VarUI8FromDec(_In_ DECIMAL*, _Out_ ULONG64*); 566HRESULT WINAPI VarUI8FromInt(INT,ULONG64*); 567HRESULT WINAPI VarUI8FromCy(CY, _Out_ ULONG64*); 568HRESULT WINAPI VarUI8FromDisp(_In_ IDispatch*, LCID, _Out_ ULONG64*); 569 570HRESULT WINAPI VarDecFromUI1(_In_ BYTE, _Out_ DECIMAL*); 571HRESULT WINAPI VarDecFromI2(_In_ SHORT, _Out_ DECIMAL*); 572HRESULT WINAPI VarDecFromI4(_In_ LONG, _Out_ DECIMAL*); 573HRESULT WINAPI VarDecFromI8(LONG64, _Out_ DECIMAL*); 574HRESULT WINAPI VarDecFromR4(_In_ FLOAT, _Out_ DECIMAL*); 575HRESULT WINAPI VarDecFromR8(_In_ DOUBLE, _Out_ DECIMAL*); 576HRESULT WINAPI VarDecFromDate(_In_ DATE, _Out_ DECIMAL*); 577HRESULT WINAPI VarDecFromStr(_In_ OLECHAR*, _In_ LCID, _In_ ULONG, _Out_ DECIMAL*); 578HRESULT WINAPI VarDecFromBool(_In_ VARIANT_BOOL, _Out_ DECIMAL*); 579HRESULT WINAPI VarDecFromI1(_In_ signed char, _Out_ DECIMAL*); 580HRESULT WINAPI VarDecFromUI2(_In_ USHORT, _Out_ DECIMAL*); 581HRESULT WINAPI VarDecFromUI4(_In_ ULONG, _Out_ DECIMAL*); 582HRESULT WINAPI VarDecFromUI8(ULONG64, _Out_ DECIMAL*); 583HRESULT WINAPI VarDecFromCy(_In_ CY, _Out_ DECIMAL*); 584HRESULT WINAPI VarDecFromDisp(_In_ IDispatch*, _In_ LCID, _Out_ DECIMAL*); 585 586#define VarUI4FromUI4( in,pOut ) ( *(pOut) = (in) ) 587#define VarI4FromI4( in,pOut ) ( *(pOut) = (in) ) 588 589#define VarUI1FromInt VarUI1FromI4 590#define VarUI1FromUint VarUI1FromUI4 591#define VarI2FromInt VarI2FromI4 592#define VarI2FromUint VarI2FromUI4 593#define VarI4FromInt VarI4FromI4 594#define VarI4FromUint VarI4FromUI4 595#define VarI8FromInt VarI8FromI4 596#define VarI8FromUint VarI8FromUI4 597#define VarR4FromInt VarR4FromI4 598#define VarR4FromUint VarR4FromUI4 599#define VarR8FromInt VarR8FromI4 600#define VarR8FromUint VarR8FromUI4 601#define VarDateFromInt VarDateFromI4 602#define VarDateFromUint VarDateFromUI4 603#define VarCyFromInt VarCyFromI4 604#define VarCyFromUint VarCyFromUI4 605#define VarBstrFromInt VarBstrFromI4 606#define VarBstrFromUint VarBstrFromUI4 607#define VarBoolFromInt VarBoolFromI4 608#define VarBoolFromUint VarBoolFromUI4 609#define VarI1FromInt VarI1FromI4 610#define VarI1FromUint VarI1FromUI4 611#define VarUI2FromInt VarUI2FromI4 612#define VarUI2FromUint VarUI2FromUI4 613#define VarUI4FromInt VarUI4FromI4 614#define VarUI4FromUint VarUI4FromUI4 615#define VarUI8FromInt VarUI8FromI4 616#define VarUI8FromUint VarUI8FromUI4 617#define VarDecFromInt VarDecFromI4 618#define VarDecFromUint VarDecFromUI4 619#define VarIntFromUI1 VarI4FromUI1 620#define VarIntFromI2 VarI4FromI2 621#define VarIntFromI4 VarI4FromI4 622#define VarIntFromI8 VarI4FromI8 623#define VarIntFromR4 VarI4FromR4 624#define VarIntFromR8 VarI4FromR8 625#define VarIntFromDate VarI4FromDate 626#define VarIntFromCy VarI4FromCy 627#define VarIntFromStr VarI4FromStr 628#define VarIntFromDisp VarI4FromDisp 629#define VarIntFromBool VarI4FromBool 630#define VarIntFromI1 VarI4FromI1 631#define VarIntFromUI2 VarI4FromUI2 632#define VarIntFromUI4 VarI4FromUI4 633#define VarIntFromUI8 VarI4FromUI8 634#define VarIntFromDec VarI4FromDec 635#define VarIntFromUint VarI4FromUI4 636#define VarUintFromUI1 VarUI4FromUI1 637#define VarUintFromI2 VarUI4FromI2 638#define VarUintFromI4 VarUI4FromI4 639#define VarUintFromI8 VarUI4FromI8 640#define VarUintFromR4 VarUI4FromR4 641#define VarUintFromR8 VarUI4FromR8 642#define VarUintFromDate VarUI4FromDate 643#define VarUintFromCy VarUI4FromCy 644#define VarUintFromStr VarUI4FromStr 645#define VarUintFromDisp VarUI4FromDisp 646#define VarUintFromBool VarUI4FromBool 647#define VarUintFromI1 VarUI4FromI1 648#define VarUintFromUI2 VarUI4FromUI2 649#define VarUintFromUI4 VarUI4FromUI4 650#define VarUintFromUI8 VarUI4FromUI8 651#define VarUintFromDec VarUI4FromDec 652#define VarUintFromInt VarUI4FromI4 653 654/* 655 * Variant Math operations 656 */ 657#define VARCMP_LT 0 658#define VARCMP_EQ 1 659#define VARCMP_GT 2 660#define VARCMP_NULL 3 661 662HRESULT WINAPI VarR4CmpR8(_In_ float, _In_ double); 663 664HRESULT WINAPI VarR8Pow(_In_ double, _In_ double, _Out_ double*); 665HRESULT WINAPI VarR8Round(_In_ double, _In_ int, _Out_ double*); 666 667HRESULT WINAPI VarDecAbs(_In_ const DECIMAL*, _Out_ DECIMAL*); 668HRESULT WINAPI VarDecAdd(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*); 669HRESULT WINAPI VarDecCmp(_In_ const DECIMAL*, _In_ const DECIMAL*); 670HRESULT WINAPI VarDecCmpR8(_In_ const DECIMAL*, _In_ DOUBLE); 671HRESULT WINAPI VarDecDiv(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*); 672HRESULT WINAPI VarDecFix(_In_ const DECIMAL*, _Out_ DECIMAL*); 673HRESULT WINAPI VarDecInt(_In_ const DECIMAL*, _Out_ DECIMAL*); 674HRESULT WINAPI VarDecMul(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*); 675HRESULT WINAPI VarDecNeg(_In_ const DECIMAL*, _Out_ DECIMAL*); 676HRESULT WINAPI VarDecRound(_In_ const DECIMAL*, int, _Out_ DECIMAL*); 677HRESULT WINAPI VarDecSub(_In_ const DECIMAL*, _In_ const DECIMAL*, _Out_ DECIMAL*); 678 679HRESULT WINAPI VarCyAbs(_In_ CY, _Out_ CY*); 680HRESULT WINAPI VarCyAdd(_In_ CY, _In_ CY, _Out_ CY*); 681HRESULT WINAPI VarCyCmp(_In_ CY, _In_ CY); 682HRESULT WINAPI VarCyCmpR8(_In_ CY, _In_ DOUBLE); 683HRESULT WINAPI VarCyFix(_In_ CY, _Out_ CY*); 684HRESULT WINAPI VarCyInt(_In_ CY, _Out_ CY*); 685HRESULT WINAPI VarCyMul(_In_ CY, _In_ CY, _Out_ CY*); 686HRESULT WINAPI VarCyMulI4(_In_ CY, _In_ LONG, _Out_ CY*); 687HRESULT WINAPI VarCyMulI8(_In_ CY, _In_ LONG64, _Out_ CY*); 688HRESULT WINAPI VarCyNeg(_In_ CY, _Out_ CY*); 689HRESULT WINAPI VarCyRound(_In_ CY, _In_ INT, _Out_ CY*); 690HRESULT WINAPI VarCySub(_In_ CY, _In_ CY, _Out_ CY*); 691 692HRESULT WINAPI VarAdd(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 693HRESULT WINAPI VarAnd(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 694HRESULT WINAPI VarCat(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 695HRESULT WINAPI VarDiv(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 696HRESULT WINAPI VarEqv(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 697HRESULT WINAPI VarIdiv(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 698HRESULT WINAPI VarImp(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 699HRESULT WINAPI VarMod(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 700HRESULT WINAPI VarMul(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 701HRESULT WINAPI VarOr(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 702HRESULT WINAPI VarPow(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 703HRESULT WINAPI VarSub(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 704HRESULT WINAPI VarXor(_In_ LPVARIANT, _In_ LPVARIANT, _Out_ LPVARIANT); 705 706HRESULT WINAPI VarAbs(_In_ LPVARIANT, _Out_ LPVARIANT); 707HRESULT WINAPI VarFix(_In_ LPVARIANT, _Out_ LPVARIANT); 708HRESULT WINAPI VarInt(_In_ LPVARIANT, _Out_ LPVARIANT); 709HRESULT WINAPI VarNeg(_In_ LPVARIANT, _Out_ LPVARIANT); 710HRESULT WINAPI VarNot(_In_ LPVARIANT, _Out_ LPVARIANT); 711 712HRESULT WINAPI VarRound(_In_ LPVARIANT, _In_ int, _Out_ LPVARIANT); 713 714HRESULT WINAPI VarCmp(_In_ LPVARIANT, _In_ LPVARIANT, _In_ LCID, _In_ ULONG); 715 716HRESULT WINAPI VarBstrCmp(_In_ BSTR, _In_ BSTR, _In_ LCID, _In_ ULONG); 717HRESULT WINAPI VarBstrCat(_In_ BSTR, _In_ BSTR, _Out_ BSTR*); 718 719 720typedef struct { 721 SYSTEMTIME st; 722 USHORT wDayOfYear; 723} UDATE; 724 725typedef struct 726{ 727 INT cDig; /* Number of parsed digits */ 728 ULONG dwInFlags; /* Acceptable state of the input string (NUMPRS_ flags) */ 729 ULONG dwOutFlags; /* Parsed state of the output string (NUMPRS_ flags) */ 730 INT cchUsed; /* Number of characters parsed from input string */ 731 INT nBaseShift; /* Base of the number (but apparently unused) */ 732 INT nPwr10; /* Scale of the number in powers of 10 */ 733} NUMPARSE; 734 735#define NUMPRS_LEADING_WHITE 0x00001 /* Leading whitespace */ 736#define NUMPRS_TRAILING_WHITE 0x00002 /* Trailing whitespace */ 737#define NUMPRS_LEADING_PLUS 0x00004 /* Leading '+' sign */ 738#define NUMPRS_TRAILING_PLUS 0x00008 /* Trailing '+' sign */ 739#define NUMPRS_LEADING_MINUS 0x00010 /* Leading '-' sign */ 740#define NUMPRS_TRAILING_MINUS 0x00020 /* Trailing '-' sign */ 741#define NUMPRS_HEX_OCT 0x00040 /* Octal number (with a leading 0) */ 742#define NUMPRS_PARENS 0x00080 /* Parentheses for negative numbers */ 743#define NUMPRS_DECIMAL 0x00100 /* Decimal separator */ 744#define NUMPRS_THOUSANDS 0x00200 /* Thousands separator */ 745#define NUMPRS_CURRENCY 0x00400 /* Currency symbol */ 746#define NUMPRS_EXPONENT 0x00800 /* Exponent (e.g. "e-14") */ 747#define NUMPRS_USE_ALL 0x01000 /* Parse the entire string */ 748#define NUMPRS_STD 0x01FFF /* Standard flags for internal coercions (All of the above) */ 749#define NUMPRS_NEG 0x10000 /* Number is negative (dwOutFlags only) */ 750#define NUMPRS_INEXACT 0x20000 /* Number is represented inexactly (dwOutFlags only) */ 751 752#define VTBIT_I1 (1 << VT_I1) 753#define VTBIT_UI1 (1 << VT_UI1) 754#define VTBIT_I2 (1 << VT_I2) 755#define VTBIT_UI2 (1 << VT_UI2) 756#define VTBIT_I4 (1 << VT_I4) 757#define VTBIT_UI4 (1 << VT_UI4) 758#define VTBIT_I8 (1 << VT_I8) 759#define VTBIT_UI8 (1 << VT_UI8) 760#define VTBIT_R4 (1 << VT_R4) 761#define VTBIT_R8 (1 << VT_R8) 762#define VTBIT_CY (1 << VT_CY) 763#define VTBIT_DECIMAL (1 << VT_DECIMAL) 764 765_Check_return_ 766HRESULT 767WINAPI 768VarParseNumFromStr( 769 _In_ OLECHAR*, 770 _In_ LCID, 771 _In_ ULONG, 772 _Out_ NUMPARSE*, 773 _Out_ BYTE*); 774 775_Check_return_ 776HRESULT 777WINAPI 778VarNumFromParseNum( 779 _In_ NUMPARSE*, 780 _In_ BYTE*, 781 _In_ ULONG, 782 _Out_ VARIANT*); 783 784INT WINAPI DosDateTimeToVariantTime(_In_ USHORT, _In_ USHORT, _Out_ double*); 785INT WINAPI VariantTimeToDosDateTime(_In_ double, _Out_ USHORT*, _Out_ USHORT*); 786 787INT WINAPI VariantTimeToSystemTime(_In_ DOUBLE, _Out_ LPSYSTEMTIME); 788INT WINAPI SystemTimeToVariantTime(_In_ LPSYSTEMTIME, _Out_ double*); 789 790_Check_return_ 791HRESULT 792WINAPI 793VarDateFromUdate( 794 _In_ UDATE*, 795 _In_ ULONG, 796 _Out_ DATE*); 797 798HRESULT 799WINAPI 800VarDateFromUdateEx( 801 _In_ UDATE*, 802 _In_ LCID, 803 _In_ ULONG, 804 _Out_ DATE*); 805 806_Check_return_ 807HRESULT 808WINAPI 809VarUdateFromDate( 810 _In_ DATE, 811 _In_ ULONG, 812 _Out_ UDATE*); 813 814/* Variant formatting */ 815HRESULT WINAPI VarWeekdayName(int, int, int, ULONG, _Out_ BSTR*); 816HRESULT WINAPI VarMonthName(int, int, ULONG, _Out_ BSTR*); 817 818_Check_return_ 819HRESULT 820WINAPI 821GetAltMonthNames( 822 LCID, 823 _Outptr_result_buffer_maybenull_(13) LPOLESTR**); 824 825HRESULT 826WINAPI 827VarFormat( 828 _In_ LPVARIANT, 829 _In_opt_ LPOLESTR, 830 int, 831 int, 832 ULONG, 833 _Out_ BSTR*); 834 835HRESULT 836WINAPI 837VarFormatCurrency( 838 _In_ LPVARIANT, 839 int, 840 int, 841 int, 842 int, 843 ULONG, 844 _Out_ BSTR*); 845 846HRESULT WINAPI VarFormatDateTime(_In_ LPVARIANT, int, ULONG, _Out_ BSTR*); 847 848HRESULT 849WINAPI 850VarFormatNumber( 851 _In_ LPVARIANT, 852 int, 853 int, 854 int, 855 int, 856 ULONG, 857 _Out_ BSTR*); 858 859HRESULT 860WINAPI 861VarFormatPercent( 862 _In_ LPVARIANT, 863 int, 864 int, 865 int, 866 int, 867 ULONG, 868 _Out_ BSTR*); 869 870HRESULT 871WINAPI 872VarFormatFromTokens( 873 _In_ LPVARIANT, 874 _In_opt_ LPOLESTR, 875 LPBYTE, 876 ULONG, 877 _Out_ BSTR*, 878 LCID); 879 880HRESULT 881WINAPI 882VarTokenizeFormatString( 883 _In_opt_ LPOLESTR, 884 _Inout_ LPBYTE, 885 int, 886 int, 887 int, 888 LCID, 889 _In_opt_ int*); 890 891 892/* 893 * IDispatch types and helper functions 894 */ 895 896/* A structure describing a single parameter to a com object method. */ 897typedef struct tagPARAMDATA 898{ 899 OLECHAR *szName; /* Name of Parameter */ 900 VARTYPE vt; /* Type of Parameter */ 901} PARAMDATA, *LPPARAMDATA; 902 903/* A structure describing a single method of a com object. */ 904typedef struct tagMETHODDATA 905{ 906 OLECHAR *szName; /* Name of method */ 907 PARAMDATA *ppdata; /* Parameters of the method */ 908 DISPID dispid; /* Id of the method */ 909 UINT iMeth; /* Vtable index of the method */ 910 CALLCONV cc; /* Calling convention of the method */ 911 UINT cArgs; /* Number of parameters in the method */ 912 WORD wFlags; /* Type of the method (DISPATCH_ flags) */ 913 VARTYPE vtReturn; /* Type of the return value */ 914} METHODDATA, *LPMETHODDATA; 915 916/* Structure describing a single com object */ 917typedef struct tagINTERFACEDATA 918{ 919 METHODDATA *pmethdata; /* Methods of the object */ 920 UINT cMembers; /* Number of methods in the object */ 921} INTERFACEDATA, *LPINTERFACEDATA; 922 923typedef enum tagREGKIND 924{ 925 REGKIND_DEFAULT, 926 REGKIND_REGISTER, 927 REGKIND_NONE 928} REGKIND; 929 930_Check_return_ 931HRESULT 932WINAPI 933DispGetParam( 934 _In_ DISPPARAMS*, 935 UINT, 936 VARTYPE, 937 _Out_ VARIANT*, 938 _Out_opt_ UINT*); 939 940_Check_return_ 941HRESULT 942WINAPI 943DispGetIDsOfNames( 944 ITypeInfo*, 945 _In_reads_(cNames) OLECHAR**, 946 UINT cNames, 947 _Out_writes_(cNames) DISPID*); 948 949_Check_return_ 950HRESULT 951WINAPI 952DispInvoke( 953 void*, 954 ITypeInfo*, 955 DISPID, 956 WORD, 957 DISPPARAMS*, 958 VARIANT*, 959 EXCEPINFO*, 960 UINT*); 961 962_Check_return_ 963HRESULT 964WINAPI 965CreateDispTypeInfo( 966 INTERFACEDATA*, 967 LCID, 968 ITypeInfo**); 969 970_Check_return_ 971HRESULT 972WINAPI 973CreateStdDispatch( 974 IUnknown*, 975 void*, 976 ITypeInfo*, 977 IUnknown**); 978 979HRESULT 980WINAPI 981DispCallFunc( 982 void*, 983 ULONG_PTR, 984 CALLCONV, 985 VARTYPE, 986 UINT, 987 VARTYPE*, 988 VARIANTARG**, 989 VARIANT*); 990 991 992/* 993 * TypeLib API 994 */ 995 996ULONG WINAPI LHashValOfNameSysA(SYSKIND,LCID,LPCSTR); 997ULONG WINAPI LHashValOfNameSys(SYSKIND,LCID,LPCOLESTR); 998 999#define LHashValOfName(lcid,name) LHashValOfNameSys(SYS_WIN32,lcid,name) 1000#define WHashValOfLHashVal(hash) ((USHORT)((hash) & 0xffff)) 1001#define IsHashValCompatible(hash1,hash2) ((hash1) & 0xff0000 == (hash2) & 0xff0000) 1002 1003#define MEMBERID_NIL DISPID_UNKNOWN 1004#define ID_DEFAULTINST -2 1005 1006#define DISPATCH_METHOD 0x1 1007#define DISPATCH_PROPERTYGET 0x2 1008#define DISPATCH_PROPERTYPUT 0x4 1009#define DISPATCH_PROPERTYPUTREF 0x8 1010 1011#define LOAD_TLB_AS_32BIT 0x20 1012#define LOAD_TLB_AS_64BIT 0x40 1013#define MASK_TO_RESET_TLB_BITS ~(LOAD_TLB_AS_32BIT|LOAD_TLB_AS_64BIT) 1014 1015_Check_return_ 1016HRESULT 1017WINAPI 1018CreateTypeLib( 1019 SYSKIND, 1020 const OLECHAR*, 1021 ICreateTypeLib**); 1022 1023_Check_return_ 1024HRESULT 1025WINAPI 1026CreateTypeLib2( 1027 SYSKIND, 1028 LPCOLESTR, 1029 ICreateTypeLib2**); 1030 1031_Check_return_ 1032HRESULT 1033WINAPI 1034LoadRegTypeLib( 1035 REFGUID, 1036 WORD, 1037 WORD, 1038 LCID, 1039 ITypeLib**); 1040 1041HRESULT WINAPI LoadTypeLib(_In_z_ const OLECHAR*, ITypeLib**); 1042_Check_return_ HRESULT WINAPI LoadTypeLibEx(LPCOLESTR, REGKIND, ITypeLib**); 1043HRESULT WINAPI QueryPathOfRegTypeLib(REFGUID,WORD,WORD,LCID,LPBSTR); 1044 1045_Check_return_ 1046HRESULT 1047WINAPI 1048RegisterTypeLib( 1049 ITypeLib*, 1050 _In_ LPCOLESTR, 1051 _In_opt_ LPCOLESTR); 1052 1053_Check_return_ 1054HRESULT 1055WINAPI 1056UnRegisterTypeLib( 1057 REFGUID, 1058 WORD, 1059 WORD, 1060 LCID, 1061 SYSKIND); 1062 1063HRESULT 1064WINAPI 1065RegisterTypeLibForUser( 1066 ITypeLib*, 1067 _In_ OLECHAR*, 1068 _In_opt_ OLECHAR*); 1069 1070HRESULT WINAPI UnRegisterTypeLibForUser(REFGUID,WORD,WORD,LCID,SYSKIND); 1071 1072VOID WINAPI ClearCustData(LPCUSTDATA); 1073 1074#ifdef __cplusplus 1075} /* extern "C" */ 1076#endif 1077 1078 1079#endif /*__WINE_OLEAUTO_H*/