' OleAuto.ab

' EXTERN_C const IID IID_StdOle;

Const STDOLE_MAJORVERNUM = &h1
Const STDOLE_MINORVERNUM = &h0
Const STDOLE_LCID = &h0000

' Version # of stdole2.tlb
Const STDOLE2_MAJORVERNUM = &h2
Const STDOLE2_MINORVERNUM = &h0
Const STDOLE2_LCID = &h0000

#require <oaidl.ab>

' BSTR API
Declare Function SysAllocString Lib "oleaut32" (sz As /*Const*/ *OLECHAR) As BSTR
Declare Function SysReAllocString Lib "oleaut32" (ByRef bstr As BSTR, psz As /*Const*/ *OLECHAR) As Long
Declare Function SysAllocStringLen Lib "oleaut32" (pch As /*Const*/ *OLECHAR, cch As DWord) As BSTR
Declare Function SysReAllocStringLen Lib "oleaut32" (ByRef bstr As BSTR, pch As /*Const*/ *OLECHAR, cch As DWord) As Long
Declare Sub SysFreeString Lib "oleaut32" (bstr As BSTR)
Declare Function SysStringLen Lib "oleaut32" (bstr As BSTR) As DWord

'#if (defined (_WIN32) Or defined (_WIN64))
Declare Function SysStringByteLen Lib "oleaut32" (bstr As BSTR) As DWord
Declare Function SysAllocStringByteLen Lib "oleaut32" (pch As PCSTR, len As DWord) As BSTR
'#endif

' Time API
Declare Function DosDateTimeToVariantTime Lib "oleaut32" (wDosDate As Word, wDosTime As Word, ByRef vtime As Double) As Long
Declare Function VariantTimeToDosDateTime Lib "oleaut32" (vtime As Double, ByRef wDosDate As Word, ByRef wDosTime As Word) As Long

'#if (defined (_WIN32) Or defined (_WIN64))
Declare Function SystemTimeToVariantTime Lib "oleaut32" (ByRef SystemTime As SYSTEMTIME, ByRef vtime As Double) As Long
Declare Function VariantTimeToSystemTime Lib "oleaut32" (vtime As Double, ByRef SystemTime As SYSTEMTIME) As Long
'#endif

' SafeArray API
Declare Function SafeArrayAllocDescriptor Lib "oleaut32" (cDims As DWord, ByRef psaOut As *SAFEARRAY) As HRESULT
Declare Function SafeArrayAllocDescriptorEx Lib "oleaut32" (vt As VARTYPE, cDims As DWord, ByRef psaOut As *SAFEARRAY) As HRESULT
Declare Function SafeArrayAllocData Lib "oleaut32" (psa As *SAFEARRAY) As HRESULT
Declare Function SafeArrayCreate Lib "oleaut32" (vt As VARTYPE, cDims As DWord, ByRef rgsabound As SAFEARRAYBOUND) As *SAFEARRAY
Declare Function SafeArrayCreateEx Lib "oleaut32" (vt As VARTYPE, cDims As DWord, ByRef rgsabound As SAFEARRAYBOUND, pvExtra As VoidPtr) As *SAFEARRAY
Declare Function SafeArrayCopyData Lib "oleaut32" (psaSource As *SAFEARRAY, psaTarget As *SAFEARRAY) As HRESULT
Declare Function SafeArrayDestroyDescriptor Lib "oleaut32" (psa As *SAFEARRAY) As HRESULT
Declare Function SafeArrayDestroyData Lib "oleaut32" (psa As *SAFEARRAY) As HRESULT
Declare Function SafeArrayDestroy Lib "oleaut32" (psa As *SAFEARRAY) As HRESULT
Declare Function SafeArrayRedim Lib "oleaut32" (psa As *SAFEARRAY, ByRef psaboundNew As SAFEARRAYBOUND) As HRESULT
Declare Function SafeArrayGetDim Lib "oleaut32" (psa As *SAFEARRAY) As DWord
Declare Function SafeArrayGetElemsize Lib "oleaut32" (psa As *SAFEARRAY) As DWord
Declare Function SafeArrayGetUBound Lib "oleaut32" (psa As *SAFEARRAY, ByRef lUbound As Long) As HRESULT
Declare Function SafeArrayGetLBound Lib "oleaut32" (psa As *SAFEARRAY, ByRef lLbound As Long) As HRESULT
Declare Function SafeArrayLock Lib "oleaut32" (psa As *SAFEARRAY) As HRESULT
Declare Function SafeArrayUnlock Lib "oleaut32" (psa As *SAFEARRAY) As HRESULT
Declare Function SafeArrayAccessData Lib "oleaut32" (psa As *SAFEARRAY, ByRef pvData As VoidPtr) As HRESULT
Declare Function SafeArrayUnaccessData Lib "oleaut32" (psa As *SAFEARRAY) As HRESULT
Declare Function SafeArrayGetElement Lib "oleaut32" (psa As *SAFEARRAY, rgIndices As *Long, ByRef v As Any) As HRESULT
Declare Function SafeArrayPutElement Lib "oleaut32" (psa As *SAFEARRAY, rgIndices As *Long, ByRef v As Any) As HRESULT
Declare Function SafeArrayCopy Lib "oleaut32" (psa As *SAFEARRAY, ByRef ppsaOut As *SAFEARRAY) As HRESULT
Declare Function SafeArrayPtrOfIndex Lib "oleaut32" (psa As *SAFEARRAY, rgIndices As *Long, ByRef pvData As VoidPtr) As HRESULT
Declare Function SafeArraySetRecordInfo Lib "oleaut32" (psa As *SAFEARRAY, prinfo As *IRecordInfo) As HRESULT
Declare Function SafeArrayGetRecordInfo Lib "oleaut32" (psa As *SAFEARRAY, ByRef prinfo As *IRecordInfo) As HRESULT
Declare Function SafeArraySetIID Lib "oleaut32" (psa As *SAFEARRAY, ByRef guid As IID) As HRESULT
Declare Function SafeArrayGetIID Lib "oleaut32" (psa As *SAFEARRAY, ByRef guid As IID) As HRESULT
Declare Function SafeArrayGetVartype Lib "oleaut32" (psa As *SAFEARRAY, ByRef vt As VARTYPE) As HRESULT
Declare Function SafeArrayCreateVector Lib "oleaut32" (psa As *SAFEARRAY, ByRef cElements As DWord) As *SAFEARRAY
Declare Function SafeArrayCreateVectorEx Lib "oleaut32" (psa As *SAFEARRAY, ByRef cElements As DWord, pvExtra As VoidPtr) As *SAFEARRAY

' VARIANT API
Declare Sub VariantInit Lib "oleaut32" (ByRef varg As VARIANTARG)
Declare Function VariantClear Lib "oleaut32" (ByRef varg As VARIANTARG) As HRESULT
Declare Function VariantCopy Lib "oleaut32" (ByRef vargDest As VARIANTARG, ByRef vargSrc As VARIANTARG) As HRESULT
Declare Function VariantCopyInd Lib "oleaut32" (ByRef varDest As VARIANT, ByRef vargSrc As VARIANTARG) As HRESULT
Declare Function VariantChangeType Lib "oleaut32" (ByRef vargDest As VARIANT, ByRef varSrc As VARIANTARG, wFlags As Word, vt As VARTYPE) As HRESULT
Declare Function VariantChangeTypeEx Lib "oleaut32" (ByRef vargDest As VARIANT, ByRef varSrc As VARIANTARG, lcid As LCID, wFlags As Word, vt As VARTYPE) As HRESULT

' Flags for VariantChangeType/VariantChangeTypeEx
Const VARIANT_NOVALUEPROP = &h01
Const VARIANT_ALPHABOOL = &h02
Const VARIANT_NOUSEROVERRIDE = &h04
Const VARIANT_CALENDAR_HIJRI = &h08
Const VARIANT_LOCALBOOL = &h10
Const VARIANT_CALENDAR_THAI = &h20
Const VARIANT_CALENDAR_GREGORIAN = &h40
Const VARIANT_USE_NLS = &h80

' Vector <-> Bstr conversion APIs
Declare Function VectorFromBstr Lib "oleaut32" (bstr As BSTR, ByRef psa As *SAFEARRAY) As HRESULT
Declare Function BstrFromVector Lib "oleaut32" (psa As *SAFEARRAY, ByRef bstr As BSTR) As HRESULT

' Variant API Flags
Const VAR_TIMEVALUEONLY = &h00000001 As DWord
Const VAR_DATEVALUEONLY = &h00000002 As DWord
Const VAR_VALIDDATE = &h00000004 As DWord
Const VAR_CALENDAR_HIJRI = &h00000008 As DWord
Const VAR_LOCALBOOL = &h00000010 As DWord
Const VAR_FORMAT_NOSUBSTITUTE = &h00000020 As DWord
Const VAR_FOURDIGITYEARS = &h00000040 As DWord
Const LOCALE_USE_NLS = &h10000000 As DWord
Const VAR_CALENDAR_THAI = &h00000080 As DWord
Const VAR_CALENDAR_GREGORIAN = &h00000100 As DWord

Const VTDATEGRE_MAX = 2958465
Const VTDATEGRE_MIN = -657434

' VARTYPE Coercion API
Declare Function VarUI1FromI2 Lib "oleaut32" (sIn As Integer, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromI4 Lib "oleaut32" (lIn As Long, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromI8 Lib "oleaut32" (i64In As Int64, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromR4 Lib "oleaut32" (fltIn As Single, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromR8 Lib "oleaut32" (dblIn As Double, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromCy Lib "oleaut32" (cyIn As CY, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromDate Lib "oleaut32" (dateIn As DATE, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromI1 Lib "oleaut32" (cIn As SByte, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromUI2 Lib "oleaut32" (uiIn As Word, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef bOut As Byte) As HRESULT

Declare Function VarI2FromUI1 Lib "oleaut32" (bIn As Byte, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromI4 Lib "oleaut32" (lIn As Long, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromI8 Lib "oleaut32" (i64In As Int64, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromR4 Lib "oleaut32" (fltIn As Single, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromR8 Lib "oleaut32" (dblIn As Double, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromCy Lib "oleaut32" (cyIn As CY, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromDate Lib "oleaut32" (dateIn As DATE, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromI1 Lib "oleaut32" (cIn As SByte, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromUI2 Lib "oleaut32" (uiIn As Word, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef sOut As Integer) As HRESULT

Declare Function VarI4FromUI1 Lib "oleaut32" (bIn As Byte, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromI2 Lib "oleaut32" (sIn As Integer, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromI8 Lib "oleaut32" (i64In As Int64, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromR4 Lib "oleaut32" (fltIn As Single, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromR8 Lib "oleaut32" (dblIn As Double, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromCy Lib "oleaut32" (cyIn As CY, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromDate Lib "oleaut32" (dateIn As DATE, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromI1 Lib "oleaut32" (cIn As SByte, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromUI2 Lib "oleaut32" (uiIn As Word, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef lOut As Long) As HRESULT
Declare Function VarI4FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef lOut As Long) As HRESULT

Declare Function VarI8FromUI1 Lib "oleaut32" (bIn As Byte, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromI2 Lib "oleaut32" (sIn As Integer, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromI4 Lib "oleaut32" (lIn As Long, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromR4 Lib "oleaut32" (fltIn As Single, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromR8 Lib "oleaut32" (dblIn As Double, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromCy Lib "oleaut32" (cyIn As CY, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromDate Lib "oleaut32" (dateIn As DATE, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromI1 Lib "oleaut32" (cIn As SByte, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromUI2 Lib "oleaut32" (uiIn As Word, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef i64Out As Int64) As HRESULT

Declare Function VarR4FromUI1 Lib "oleaut32" (bIn As Byte, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromI2 Lib "oleaut32" (sIn As Integer, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromI4 Lib "oleaut32" (lIn As Long, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromI8 Lib "oleaut32" (i64In As Int64, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromR8 Lib "oleaut32" (dblIn As Double, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromCy Lib "oleaut32" (cyIn As CY, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromDate Lib "oleaut32" (dateIn As DATE, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromI1 Lib "oleaut32" (cIn As SByte, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromUI2 Lib "oleaut32" (uiIn As Word, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef fltOut As Single) As HRESULT

Declare Function VarR8FromUI1 Lib "oleaut32" (bIn As Byte, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromI2 Lib "oleaut32" (sIn As Integer, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromI4 Lib "oleaut32" (lIn As Long, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromI8 Lib "oleaut32" (i64In As Int64, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromR4 Lib "oleaut32" (fltIn As Single, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromCy Lib "oleaut32" (cyIn As CY, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromDate Lib "oleaut32" (dateIn As DATE, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromI1 Lib "oleaut32" (cIn As SByte, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromUI2 Lib "oleaut32" (uiIn As Word, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef dblOut As Double) As HRESULT

Declare Function VarDateFromUI1 Lib "oleaut32" (bIn As Byte, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromI2 Lib "oleaut32" (sIn As Integer, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromI4 Lib "oleaut32" (lIn As Long, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromI8 Lib "oleaut32" (i64In As Int64, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromR4 Lib "oleaut32" (fltIn As Single, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromR8 Lib "oleaut32" (dblIn As Double, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromCy Lib "oleaut32" (cyIn As CY, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromI1 Lib "oleaut32" (cIn As SByte, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromUI2 Lib "oleaut32" (uiIn As Word, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromUI8 Lib "oleaut32" (ui64In As QWord, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef dateOut As DATE) As HRESULT

Declare Function VarCyFromUI1 Lib "oleaut32" (bIn As Byte, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromI2 Lib "oleaut32" (sIn As Integer, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromI4 Lib "oleaut32" (lIn As Long, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromI8 Lib "oleaut32" (i64In As Int64, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromR4 Lib "oleaut32" (fltIn As Single, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromR8 Lib "oleaut32" (dblIn As Double, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromDate Lib "oleaut32" (dateIn As DATE, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromI1 Lib "oleaut32" (cIn As SByte, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromUI2 Lib "oleaut32" (uiIn As Word, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromUI8 Lib "oleaut32" (ui64In As QWord, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef cyOut As CY) As HRESULT

Declare Function VarBstrFromUI1 Lib "oleaut32" (bIn As Byte, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromI2 Lib "oleaut32" (sIn As Integer, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromI4 Lib "oleaut32" (lIn As Long, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromI8 Lib "oleaut32" (i64In As Int64, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromR4 Lib "oleaut32" (fltIn As Single, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromR8 Lib "oleaut32" (dblIn As Double, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromCy Lib "oleaut32" (cyIn As CY, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromDate Lib "oleaut32" (dateIn As DATE, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromI1 Lib "oleaut32" (cIn As SByte, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromUI2 Lib "oleaut32" (uiIn As Word, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromUI4 Lib "oleaut32" (ulIn As DWord, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromUI8 Lib "oleaut32" (i64In As QWord, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromDec Lib "oleaut32" (ByRef decIn As DECIMAL, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT

Declare Function VarBoolFromUI1 Lib "oleaut32" (bIn As Byte, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromI2 Lib "oleaut32" (sIn As Integer, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromI4 Lib "oleaut32" (lIn As Long, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromI8 Lib "oleaut32" (i64In As Int64, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromR4 Lib "oleaut32" (fltIn As Single, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromR8 Lib "oleaut32" (dblIn As Double, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromDate Lib "oleaut32" (dateIn As DATE, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromCy Lib "oleaut32" (cyIn As CY, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromI1 Lib "oleaut32" (cIn As SByte, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromUI2 Lib "oleaut32" (uiIn As Word, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromUI8 Lib "oleaut32" (i64In As QWord, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef boolOut As VARIANT_BOOL) As HRESULT

Declare Function VarI1FromI2 Lib "oleaut32" (sIn As Integer, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromI4 Lib "oleaut32" (lIn As Long, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromI8 Lib "oleaut32" (i64In As Int64, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromR4 Lib "oleaut32" (fltIn As Single, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromR8 Lib "oleaut32" (dblIn As Double, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromCy Lib "oleaut32" (cyIn As CY, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromDate Lib "oleaut32" (dateIn As DATE, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromI1 Lib "oleaut32" (cIn As SByte, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromUI2 Lib "oleaut32" (uiIn As Word, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef cOut As Char) As HRESULT

Declare Function VarUI2FromUI1 Lib "oleaut32" (bIn As Byte, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromI2 Lib "oleaut32" (uiIn As Integer, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromI4 Lib "oleaut32" (lIn As Long, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromI8 Lib "oleaut32" (i64In As Int64, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromR4 Lib "oleaut32" (fltIn As Single, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromR8 Lib "oleaut32" (dblIn As Double, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromDate Lib "oleaut32" (dateIn As DATE, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromCy Lib "oleaut32" (cyIn As CY, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromI1 Lib "oleaut32" (cIn As SByte, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromUI8 Lib "oleaut32" (i64In As QWord, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef uiOut As Word) As HRESULT

Declare Function VarUI4FromUI1 Lib "oleaut32" (bIn As Byte, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromI2 Lib "oleaut32" (uiIn As Integer, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromI4 Lib "oleaut32" (lIn As Long, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromI8 Lib "oleaut32" (i64In As Int64, ByRef lOut As DWord) As HRESULT
Declare Function VarUI4FromR4 Lib "oleaut32" (fltIn As Single, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromR8 Lib "oleaut32" (dblIn As Double, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromDate Lib "oleaut32" (dateIn As DATE, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromCy Lib "oleaut32" (cyIn As CY, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromI1 Lib "oleaut32" (cIn As SByte, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromUI2 Lib "oleaut32" (uiIn As Word, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI4FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef lOut As DWord) As HRESULT
Declare Function VarUI4FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef ulOut As DWord) As HRESULT

Declare Function VarUI8FromUI1 Lib "oleaut32" (bIn As Byte, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromI2 Lib "oleaut32" (sIn As Integer, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromI4 Lib "oleaut32" (lIn As Long, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromI8 Lib "oleaut32" (ui64In As Int64, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromR4 Lib "oleaut32" (fltIn As Single, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromR8 Lib "oleaut32" (dblIn As Double, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromCy Lib "oleaut32" (cyIn As CY, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromDate Lib "oleaut32" (dateIn As DATE, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromI1 Lib "oleaut32" (cIn As SByte, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromUI2 Lib "oleaut32" (uiIn As Word, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromDec Lib "oleaut32" (ByRef decIn As DECIMAL, ByRef i64Out As QWord) As HRESULT

Declare Function VarDecFromUI1 Lib "oleaut32" (bIn As Byte, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromI2 Lib "oleaut32" (uiIn As Integer, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromI4 Lib "oleaut32" (lIn As Long, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromI8 Lib "oleaut32" (i64In As Int64, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromR4 Lib "oleaut32" (fltIn As Single, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromR8 Lib "oleaut32" (dblIn As Double, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromDate Lib "oleaut32" (dateIn As DATE, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromCy Lib "oleaut32" (cyIn As CY, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromI1 Lib "oleaut32" (cIn As SByte, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromUI2 Lib "oleaut32" (uiIn As Word, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef decOut As DECIMAL) As HRESULT
Declare Function VarDecFromUI8 Lib "oleaut32" (ui64In As QWord, ByRef decOut As DECIMAL) As HRESULT

Declare Function VarUI1FromInt Lib "oleaut32" Alias "VarUI1FromI4" (lIn As Long, ByRef bOut As Byte) As HRESULT
Declare Function VarUI1FromUint Lib "oleaut32" Alias "VarUI1FromUI4" (ulIn As DWord, ByRef bOut As Byte) As HRESULT
Declare Function VarI2FromInt Lib "oleaut32" Alias "VarI2FromI4" (lIn As Long, ByRef sOut As Integer) As HRESULT
Declare Function VarI2FromUint Lib "oleaut32" Alias "VarI2FromUI4" (ulIn As DWord, ByRef sOut As Integer) As HRESULT
Declare Function VarI4FromUint Lib "oleaut32" Alias "VarI4FromUI4" (ulIn As DWord, ByRef lOut As Long) As HRESULT
Declare Function VarI8FromInt Lib "oleaut32" Alias "VarI8FromI4" (lIn As Long, ByRef i64Out As Int64) As HRESULT
Declare Function VarI8FromUint Lib "oleaut32" Alias "VarI8FromUI4" (ulIn As DWord, ByRef i64Out As Int64) As HRESULT
Declare Function VarR4FromInt Lib "oleaut32" Alias "VarR4FromI4" (lIn As Long, ByRef fltOut As Single) As HRESULT
Declare Function VarR4FromUint Lib "oleaut32" Alias "VarR4FromUI4" (ulIn As DWord, ByRef fltOut As Single) As HRESULT
Declare Function VarR8FromInt Lib "oleaut32" Alias "VarR8FromI4" (lIn As Long, ByRef dblOut As Double) As HRESULT
Declare Function VarR8FromUint Lib "oleaut32" Alias "VarR8FromUI4" (ulIn As DWord, ByRef dblOut As Double) As HRESULT
Declare Function VarDateFromInt Lib "oleaut32" Alias "VarDateFromI4" (lIn As Long, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromUint Lib "oleaut32" Alias "VarDateFromUI4" (ulIn As DWord, ByRef dateOut As DATE) As HRESULT
Declare Function VarCyFromInt Lib "oleaut32" Alias "VarCyFromI4" (lIn As Long, ByRef cyOut As CY) As HRESULT
Declare Function VarCyFromUint Lib "oleaut32" Alias "VarCyFromUI4" (ulIn As DWord, ByRef cyOut As CY) As HRESULT
Declare Function VarBstrFromInt Lib "oleaut32" Alias "VarBstrFromI4" (lIn As Long, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBstrFromUint Lib "oleaut32" Alias "VarBstrFromUI4" (ulIn As DWord, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarBoolFromInt Lib "oleaut32" Alias "VarBoolFromI4" (lIn As Long, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarBoolFromUint Lib "oleaut32" Alias "VarBoolFromUI4" (ulIn As DWord, ByRef boolOut As VARIANT_BOOL) As HRESULT
Declare Function VarI1FromInt Lib "oleaut32" Alias "VarI1FromI4" (lIn As Long, ByRef cOut As Char) As HRESULT
Declare Function VarI1FromUint Lib "oleaut32" Alias "VarI1FromUI4" (ulIn As DWord, ByRef cOut As Char) As HRESULT
Declare Function VarUI2FromInt Lib "oleaut32" Alias "VarUI2FromI4" (lIn As Long, ByRef uiOut As Word) As HRESULT
Declare Function VarUI2FromUint Lib "oleaut32" Alias "VarUI2FromUI4" (ulIn As DWord, ByRef uiOut As Word) As HRESULT
Declare Function VarUI4FromInt Lib "oleaut32" Alias "VarUI4FromI4" (lIn As Long, ByRef ulOut As DWord) As HRESULT
Declare Function VarUI8FromInt Lib "oleaut32" Alias "VarUI8FromI4" (lIn As Long, ByRef i64Out As QWord) As HRESULT
Declare Function VarUI8FromUint Lib "oleaut32" Alias "VarUI8FromUI4" (ulIn As DWord, ByRef i64Out As QWord) As HRESULT
Declare Function VarDecFromInt Lib "oleaut32" Alias "VarDecFromI4" (lIn As Long, ByRef decOut As DECIMAL) As HRESULT

Declare Function VarIntFromUI1 Lib "oleaut32" Alias "VarI4FromUI1" (bIn As Byte, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromI2 Lib "oleaut32" Alias "VarI4FromI2" (sIn As Integer, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromI8 Lib "oleaut32" Alias "VarI4FromI8" (i64In As Int64, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromR4 Lib "oleaut32" Alias "VarI4FromR4" (fltIn As Single, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromR8 Lib "oleaut32" Alias "VarI4FromR8" (dblIn As Double, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromCy Lib "oleaut32" Alias "VarI4FromCy" (cyIn As CY, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromDate Lib "oleaut32" Alias "VarI4FromDate" (dateIn As DATE, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromStr Lib "oleaut32" Alias "VarI4FromStr" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromDisp Lib "oleaut32" Alias "VarI4FromDisp" (pdispIn As *IDispatch, lcid As LCID, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromBool Lib "oleaut32" Alias "VarI4FromBool" (boolIn As VARIANT_BOOL, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromI1 Lib "oleaut32" Alias "VarI4FromI1" (cIn As SByte, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromUI2 Lib "oleaut32" Alias "VarI4FromUI2" (uiIn As Word, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromUI4 Lib "oleaut32" Alias "VarI4FromUI4" (ulIn As DWord, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromUI8 Lib "oleaut32" Alias "VarI4FromUI8" (ui64In As QWord, ByRef lOut As Long) As HRESULT
Declare Function VarIntFromDec Lib "oleaut32" Alias "VarI4FromDec" (ByRef decIn As DECIMAL, ByRef lOut As Long) As HRESULT
Declare Function VarUintFromUI1 Lib "oleaut32" Alias "VarUI4FromUI1" (bIn As Byte, ByRef ulOut As DWord) As HRESULT
Declare Function VarIntFromUint Lib "oleaut32" Alias "VarI4FromUI4" (ulIn As DWord, ByRef lOut As Long) As HRESULT
Declare Function VarUintFromI2 Lib "oleaut32" Alias "VarUI4FromI2" (uiIn As Integer, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromI4 Lib "oleaut32" Alias "VarUI4FromI4" (lIn As Long, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromI8 Lib "oleaut32" Alias "VarUI4FromI8" (i64In As Int64, ByRef lOut As DWord) As HRESULT
Declare Function VarUintFromR4 Lib "oleaut32" Alias "VarUI4FromR4" (fltIn As Single, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromR8 Lib "oleaut32" Alias "VarUI4FromR8" (dblIn As Double, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromDate Lib "oleaut32" Alias "VarUI4FromDate" (dateIn As DATE, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromCy Lib "oleaut32" Alias "VarUI4FromCy" (cyIn As CY, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromStr Lib "oleaut32" Alias "VarUI4FromStr" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromDisp Lib "oleaut32" Alias "VarUI4FromDisp" (pdispIn As *IDispatch, lcid As LCID, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromBool Lib "oleaut32" Alias "VarUI4FromBool" (boolIn As VARIANT_BOOL, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromI1 Lib "oleaut32" Alias "VarUI4FromI1" (cIn As SByte, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromUI2 Lib "oleaut32" Alias "VarUI4FromUI2" (uiIn As Word, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromUI8 Lib "oleaut32" Alias "VarUI4FromUI8" (ui64In As QWord, ByRef lOut As DWord) As HRESULT
Declare Function VarUintFromDec Lib "oleaut32" Alias "VarUI4FromDec" (ByRef decIn As DECIMAL, ByRef ulOut As DWord) As HRESULT
Declare Function VarUintFromInt Lib "oleaut32" Alias "VarUI4FromI4" (lIn As Long, ByRef ulOut As DWord) As HRESULT

Sub VarI4FromInt(iIn As Long, ByRef lOut As Long)
	lOut = iIn
End Sub

Sub VarUI4FromUint(uiIn As DWord, ByRef ulOut As DWord)
	ulOut = uiIn
End Sub

Sub VarIntFromI4(lIn As Long, ByRef iOut As Long)
	iOut = lIn
End Sub

Sub VarUintFromUI4(ulIn As DWord, ByRef uiOut As DWord)
	uiOut = ulIn
End Sub

' New VARIANT <-> string parsing functions
Type NUMPARSE
	cDig As Long
	dwInFlags As DWord
	dwOutFlags As DWord
	cchUsed As Long
	nBaseShift As Long
	nPwr10 As Long
End Type

Const NUMPRS_LEADING_WHITE  = &h0001
Const NUMPRS_TRAILING_WHITE = &h0002
Const NUMPRS_LEADING_PLUS = &h0004
Const NUMPRS_TRAILING_PLUS = &h0008
Const NUMPRS_LEADING_MINUS = &h0010
Const NUMPRS_TRAILING_MINUS = &h0020
Const NUMPRS_HEX_OCT = &h0040
Const NUMPRS_PARENS = &h0080
Const NUMPRS_DECIMAL = &h0100
Const NUMPRS_THOUSANDS = &h0200
Const NUMPRS_CURRENCY = &h0400
Const NUMPRS_EXPONENT = &h0800
Const NUMPRS_USE_ALL = &h1000
Const NUMPRS_STD = &h1FFF

Const NUMPRS_NEG = &h110000
Const NUMPRS_INEXACT = &h20000

Const VTBIT_I1 = (1 << VT_I1)
Const VTBIT_UI1 = (1 << VT_UI1)
Const VTBIT_I2 = (1 << VT_I2)
Const VTBIT_UI2 = (1 << VT_UI2)
Const VTBIT_I4 = (1 << VT_I4)
Const VTBIT_UI4 = (1 << VT_UI4)
Const VTBIT_I8 = (1 << VT_I8)
Const VTBIT_UI8 = (1 << VT_UI8)
Const VTBIT_R4 = (1 << VT_R4)
Const VTBIT_R8 = (1 << VT_R8)
Const VTBIT_CY = (1 << VT_CY)
Const VTBIT_DECIMAL = (1 << VT_DECIMAL)

Declare Function VarParseNumFromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef numprs As NUMPARSE, rgbDig As *Byte) As HRESULT
Declare Function VarNumFromParseNum Lib "oleaut32" (ByRef numprs As NUMPARSE, rgbDig As *Byte, dwVtBits As DWord, ByRef var As VARIANT) As HRESULT

' VARTYPE Math API
Declare Function VarAdd Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarAnd Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarCat Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarDiv Lib "oleaut32.dll" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarEqv Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarIdiv Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarImp Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarMod Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarMul Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarOr Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarPow Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarSub Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarXor Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, ByRef result As VARIANT) As HRESULT

Declare Function VarAbs Lib "oleaut32" (ByRef in As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarFix Lib "oleaut32" (ByRef in As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarInt Lib "oleaut32" (ByRef in As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarNeg Lib "oleaut32" (ByRef in As VARIANT, ByRef result As VARIANT) As HRESULT
Declare Function VarNot Lib "oleaut32" (ByRef in As VARIANT, ByRef result As VARIANT) As HRESULT

Declare Function VarRound Lib "oleaut32" (ByRef in As VARIANT, cDecimals As Long, ByRef result As VARIANT) As HRESULT

Declare Function VarCmp Lib "oleaut32" (ByRef lhs As VARIANT, ByRef rhs As VARIANT, lcid As LCID, dwFlags As DWord) As HRESULT

Declare Function VarDecAdd Lib "oleaut32" (ByRef lhs As DECIMAL, ByRef rhs As DECIMAL, ByRef result As DECIMAL) As HRESULT
Declare Function VarDecDiv Lib "oleaut32" (ByRef lhs As DECIMAL, ByRef rhs As DECIMAL, ByRef result As DECIMAL) As HRESULT
Declare Function VarDecMul Lib "oleaut32" (ByRef lhs As DECIMAL, ByRef rhs As DECIMAL, ByRef result As DECIMAL) As HRESULT
Declare Function VarDecSub Lib "oleaut32" (ByRef lhs As DECIMAL, ByRef rhs As DECIMAL, ByRef result As DECIMAL) As HRESULT

Declare Function VarDecAbs Lib "oleaut32" (ByRef in As DECIMAL, ByRef result As DECIMAL) As HRESULT
Declare Function VarDecFix Lib "oleaut32" (ByRef in As DECIMAL, ByRef result As DECIMAL) As HRESULT
Declare Function VarDecInt Lib "oleaut32" (ByRef in As DECIMAL, ByRef result As DECIMAL) As HRESULT
Declare Function VarDecNeg Lib "oleaut32" (ByRef in As DECIMAL, ByRef result As DECIMAL) As HRESULT

Declare Function VarDecRound Lib "oleaut32" (ByRef in As DECIMAL, cDecimals As Long, ByRef result As DECIMAL) As HRESULT

Declare Function VarDecCmp Lib "oleaut32" (ByRef lhs As DECIMAL, ByRef rhs As DECIMAL) As HRESULT
Declare Function VarDecCmpR8 Lib "oleaut32" (ByRef lhs As DECIMAL, ByRef rhs As Double) As HRESULT

Declare Function VarCyAdd Lib "oleaut32" (lhs As CY, rhs As CY, ByRef result As CY) As HRESULT
Declare Function VarCyMul Lib "oleaut32" (lhs As CY, rhs As CY, ByRef result As CY) As HRESULT
Declare Function VarCyMulI4 Lib "oleaut32" (lhs As CY, rhs As Long, ByRef result As CY) As HRESULT
Declare Function VarCyMulI8 Lib "oleaut32" (lhs As CY, rhs As Int64, ByRef result As CY) As HRESULT
Declare Function VarCySub Lib "oleaut32" (lhs As CY, rhs As CY, ByRef result As CY) As HRESULT

Declare Function VarCyAbs Lib "oleaut32" (in As CY, ByRef result As CY) As HRESULT
Declare Function VarCyFix Lib "oleaut32" (in As CY, ByRef result As CY) As HRESULT
Declare Function VarCyInt Lib "oleaut32" (in As CY, ByRef result As CY) As HRESULT
Declare Function VarCyNeg Lib "oleaut32" (in As CY, ByRef result As CY) As HRESULT

Declare Function VarCyRound Lib "oleaut32" (in As CY, cDecimals As Long, ByRef result As CY) As HRESULT

Declare Function VarCyCmp Lib "oleaut32" (ByRef lhs As CY, ByRef rhs As CY) As HRESULT
Declare Function VarCyCmpR8 Lib "oleaut32" (ByRef lhs As CY, ByRef rhs As Double) As HRESULT

Declare Function VarBstrCat Lib "oleaut32" (lhs As BSTR, rhs As BSTR, ByRef result As BSTR) As HRESULT
Declare Function VarBstrCmp Lib "oleaut32" (lhs As BSTR, rhs As BSTR, lcid As LCID, dwFlags As DWord) As HRESULT
Declare Function VarR8Pow Lib "oleaut32" (lhs As Double, rhs As Double, ByRef result As Double) As HRESULT
Declare Function VarR4CmpR8 Lib "oleaut32" (lhs As Single, rhs As Double) As HRESULT
Declare Function VarR8Round Lib "oleaut32" (in As Double, cDecimals As Long, ByRef result As Double) As HRESULT

Const VARCMP_LT = 0
Const VARCMP_EQ = 1
Const VARCMP_GT = 2
Const VARCMP_NULL = 3

Const VT_HARDTYPE = VT_RESERVED

' New date functions
Type UDATE
	st As SYSTEMTIME
	wDayOfYear As Word
End Type

Declare Function VarDateFromUdate Lib "oleaut32" (ByRef udateIn As UDATE, dwFlags As DWord, ByRef dateOut As DATE) As HRESULT
Declare Function VarDateFromUdateEx Lib "oleaut32" (ByRef udateIn As UDATE, lcid As LCID, dwFlags As DWord, ByRef dateOut As DATE) As HRESULT
Declare Function VarUdateFromDate Lib "oleaut32" (dateIn As DATE, dwFlags As DWord, ByRef udateOut As UDATE) As HRESULT

Declare Function GetAltMonthNames Lib "oleaut32" (lcid As LCID, ByRef rgp As LPOLESTR) As HRESULT

' Format
Declare Function VarFormat Lib "oleaut32" (ByRef in As VARIANT, pstrFormat As LPOLESTR, iFirstDay As Long, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarFormatDateTime Lib "oleaut32" (ByRef in As VARIANT, iNamedFormat As Long, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarFormatNumber Lib "oleaut32" (ByRef in As VARIANT, iNumDig As Long, iIncLead As Long, iUseParens As Long, iGroup As Long, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarFormatPercent Lib "oleaut32" (ByRef in As VARIANT, iNumDig As Long, iIncLead As Long, iUseParens As Long, iGroup As Long, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarFormatCurrency Lib "oleaut32" (ByRef in As VARIANT, iNumDig As Long, iIncLead As Long, iUseParens As Long, iGroup As Long, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT

Declare Function VarWeekdayName Lib "oleaut32" (iWeekday As Long, fAbbrev As Long, iFirstDay As Long, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
Declare Function VarMonthName Lib "oleaut32" (iMonth As Long, fAbbrev As Long, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT

Declare Function VarFormatFromTokens Lib "oleaut32" (ByRef in As VARIANT, pstrFormat As LPOLESTR, pbTokCur As *Byte, dwFlags As DWord, ByRef bstrOut As BSTR, lcid As LCID) As HRESULT
Declare Function VarTokenizeFormatString Lib "oleaut32" (pstrFormat As LPOLESTR, rgbTok As *Byte, cbTok As Long, iFirstDay As Long, iFirstWeek As Long, lcid As LCID, ByRef cbActual As Long) As HRESULT

' ITypeInfo
TypeDef DISPID = Long
typedef MEMBERID = DISPID

'Const MEMBERID_NIL = DISPID_UNKNOWN
Const ID_DEFAULTINST = -2


Const DISPATCH_METHOD = &h1
Const DISPATCH_PROPERTYGET = &h2
Const DISPATCH_PROPERTYPUT = &h4
Const DISPATCH_PROPERTYPUTREF = &h8

Typedef LPTYPEINFO = VoidPtr '*ITypeInfo

' ITypeComp
TypeDef LPTYPECOMP = VoidPtr '*ITypeComp

' ICreateTypeLib
TypeDef LPCREATETYPELIB = VoidPtr '*ICreateTypeLib
typedef LPCREATETYPEINFO = VoidPtr '*ICreateTypeInfo

' TypeInfo API
'#if (defined (_WIN32) || defined (_WIN64))
Declare Function LHashValOfNameSysA Lib "oleaut32" (syskind As SYSKIND, lcid As LCID, szName As PCSTR) As DWord
'#endif

Declare Function LHashValOfNameSys Lib "oleaut32" (syskind As SYSKIND, lcid As LCID, szName As /*Const*/ *OLECHAR) As DWord

Const LHashValOfName(lcid, szName) = LHashValOfNameSys(SYS_WIN32, (lcid), (szName))
Const WHashValOfLHashVal(lhashval) = (((lhashval) And &h0000ffff) As Word)
Const IsHashValCompatible(lhashval1, lhashval2) = (((&h00ff0000 And (lhashval1)) = (&h00ff0000 And (lhashval2))) As BOOL)

'Declare Function LoadTypeLib Lib "oleaut32" (szFile As /*Const*/ *OLECHAR, ByRef ptlib As *ITypeLib) As DWord

Const Enum REGKIND
	REGKIND_DEFAULT,
	REGKIND_REGISTER,
	REGKIND_NONE
End Enum

Const LOAD_TLB_AS_32BIT = &h20
Const LOAD_TLB_AS_64BIT = &h40
Const MASK_TO_RESET_TLB_BITS = (Not (LOAD_TLB_AS_32BIT Or LOAD_TLB_AS_64BIT))

Declare Function LoadTypeLibEx Lib "oleaut32" (szFile As /*Const*/ *OLECHAR, regkind As REGKIND, ByRef ptlib As *ITypeLib) As HRESULT
Declare Function LoadRegTypeLib Lib "oleaut32" (ByRef rguid As GUID, wVerMajor As Word, wVerMinor As Word, lcid As LCID, ByRef ptlib As *ITypeLib) As HRESULT
Declare Function QueryPathOfRegTypeLib Lib "oleaut32" (ByRef rguid As GUID, wVerMajor As Word, wVerMinor As Word, lcid As LCID, ByRef bstrPathName As BSTR) As HRESULT
Declare Function RegisterTypeLib Lib "oleaut32" (ptlib As *ITypeLib, szFullPath As *OLECHAR, szHelpDir As *OLECHAR) As HRESULT
Declare Function CreateTypeLib Lib "oleaut32" (syskind As SYSKIND, szFile As /*Const*/ *OLECHAR, ByRef pctlib As *ICreateTypeLib) As HRESULT
Declare Function CreateTypeLib2 Lib "oleaut32" (syskind As SYSKIND, szFile As LPCOLESTR, ByRef pctlib As *ICreateTypeLib) As HRESULT

' IDispatch implementation support

Type PARAMDATA
	szName As *OLECHAR
	vt As *VARTYPE
End Type

TypeDef LPPARAMDATA = *PARAMDATA

Type METHODDATA
	szName As *OLECHAR
	ppdata As *PARAMDATA
	dispid As DISPID
	iMeth As DWord
	cc As CALLCONV
	cArgs As DWord
	wFlags As Word
	vtReturn As VARTYPE
End Type

TypeDef LPMETHODDATA = *METHODDATA

Type INTERFACEDATA
	pmethdata As *METHODDATA
	cMembers As DWord
End Type

TypeDef LPINTERFACEDATA = *INTERFACEDATA

Declare Function DispGetParam Lib "oleaut32" (pdispparams As *DISPPARAMS, position As DWord, vtTarg As VARTYPE, ByRef varResult As VARIANT, ByRef uArgErr As DWord) As HRESULT
Declare Function DispGetIDsOfNames Lib "oleaut32" (ptinfo As *ITypeInfo, position As DWord, vtTarg As VARTYPE, ByRef varResult As VARIANT, ByRef uArgErr As DWord) As HRESULT
Declare Function DispInvoke Lib "oleaut32" (_this As VoidPtr, ptinfo As *ITypeInfo, dispidMember As DISPID, wFlags As Word, pparams As *DISPPARAMS, ByRef varResult As VARIANT, ByRef excepinfo As EXCEPINFO, ByRef uArgErr As DWord) As HRESULT
Declare Function CreateDispTypeInfo Lib "oleaut32" (ByRef pidata As INTERFACEDATA, lcid As LCID, ByRef ptinfo As *ITypeInfo) As HRESULT
Declare Function CreateStdDispatch Lib "oleaut32" (punkOuter As *IUnknown, pvThis As VoidPtr, ptinfo As *ITypeInfo, ByRef punkStdDisp As *IUnknown) As HRESULT
Declare Function DispCallFunc Lib "oleaut32" (pvInstance As VoidPtr, oVft As ULONG_PTR, cc As CALLCONV, vtReturn As VARTYPE, cActuals As DWord, ByRef rgvt As VARTYPE, ByRef rgpvarg As *VARIANTARG, ByRef vargResult As VARIANT) As HRESULT

' Active Object Registration API
Const ACTIVEOBJECT_STRONG = &h0
Const ACTIVEOBJECT_WEAK = &h1

Declare Function RegisterActiveObject Lib "oleaut32" (punk As *IUnknown, ByRef rclsid As CLSID, dwFlags As DWord, ByRef dwRegister As DWord) As HRESULT
Declare Function RevokeActiveObject Lib "oleaut32" (dwRegister As DWord, pvReserved As VoidPtr) As HRESULT
Declare Function GetActiveObject Lib "oleaut32" (ByRef rclsid As CLSID, pvReserved As VoidPtr, ByRef punk As *IUnknown) As HRESULT

' ErrorInfo API
Declare Function SetErrorInfo Lib "oleaut32" (dwReserved As DWord, perrinfo As *IErrorInfo) As HRESULT
Declare Function GetErrorInfo Lib "oleaut32" (dwReserved As DWord, ByRef perrinfo As *IErrorInfo) As HRESULT
Declare Function CreateErrorInfo Lib "oleaut32" (ByRef perrinfo As *ICreateErrorInfo) As HRESULT

' User Defined Data types support
Declare Function GetRecordInfoFromTypeInfo Lib "oleaut32" (pTypeInfo As *ITypeInfo, ByRef pRecInfo As *IRecordInfo) As HRESULT
Declare Function GetRecordInfoFromGuids Lib "oleaut32" (ByRef rGuidTypeLib As GUID, uVerMajor As DWord, uVerMinor As DWord, lcid As LCID, ByRef rGuidTypeInfo As GUID, ByRef pRecInfo As *IRecordInfo) As HRESULT

' MISC API
Declare Function OaBuildVersion Lib "oleaut32" () As DWord
Declare Sub ClearCustData Lib "oleaut32" (ByRef CustData As CUSTDATA)
