From bc93bc833e4b730627d0b2167ce6dc95190b3e88 Mon Sep 17 00:00:00 2001 From: Justin Bradford Date: Fri, 11 Dec 1998 14:02:16 +0000 Subject: [PATCH] Most of the currency variant conversion functions implemented. Minor bugfixes and header tidying. --- include/mapidefs.h | 16 +++ include/oleauto.h | 59 ++++----- include/win16drv.h | 2 - include/wintypes.h | 6 + ole/compobj.c | 2 +- ole/variant.c | 338 +++++++++++++++++++++++++++++++++++++++++++++++--- relay32/oleaut32.spec | 40 +++--- 7 files changed, 391 insertions(+), 72 deletions(-) create mode 100644 include/mapidefs.h diff --git a/include/mapidefs.h b/include/mapidefs.h new file mode 100644 index 00000000000..19f94ef2a56 --- /dev/null +++ b/include/mapidefs.h @@ -0,0 +1,16 @@ +#ifndef __WINE_MAPIDEFS_H +#define __WINE_MAPIDEFS_H + +#include "wintypes.h" + +typedef union tagCY CY; + +union tagCY{ + struct { + unsigned long Lo; + long Hi; + } u; + LONGLONG int64; +}; + +#endif /*__WINE_MAPIDEFS_H*/ diff --git a/include/oleauto.h b/include/oleauto.h index a3aba36036e..ed52dfef594 100644 --- a/include/oleauto.h +++ b/include/oleauto.h @@ -2,6 +2,7 @@ #define __WINE_OLEAUTO_H #include +#include "mapidefs.h" BSTR16 WINAPI SysAllocString16(LPOLESTR16); BSTR32 WINAPI SysAllocString32(LPOLESTR32); @@ -38,7 +39,6 @@ typedef short VARIANT_BOOL; #define VARIANT_TRUE 0xFFFF #define VARIANT_FALSE 0x0000 -typedef double DATE; typedef LONG SCODE; enum VARENUM { @@ -135,9 +135,9 @@ struct tagVARIANT { SCODE scode; DATE date; BSTR32 bstrVal; + CY cyVal; /* DECIMAL decVal; - CY cyVal; IUnknown* punkVal; IDispatch* pdispVal; SAFEARRAY* parray; @@ -161,9 +161,9 @@ struct tagVARIANT { BSTR32* pbstrVal; VARIANT* pvarVal; PVOID byref; + CY* pcyVal; /* DECIMAL* pdecVal; - CY* pcyVal; IUnknown** ppunkVal; IDispatch** ppdispVal; SAFEARRAY** pparray; @@ -296,14 +296,14 @@ HRESULT WINAPI VarUI1FromUI432(ULONG ulIn, BYTE*pbOut); #define VarUI1FromUI4 WINELIB_NAME(VarUI1FromUI4) HRESULT WINAPI VarUI1FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut); #define VarUI1FromStr WINELIB_NAME(VarUI1FromStr) +HRESULT WINAPI VarUI1FromCy32(CY cyIn, BYTE* pbOut); +#define VarUI1FromCy WINELIB_NAME(VarUI1FromCy) /* HRESULT WINAPI VarUI1FromDec32(DECIMAL*pdecIn, BYTE*pbOut); #define VarUI1FromDec WINELIB_NAME(VarUI1FromDec) HRESULT WINAPI VarUI1FromDisp32(IDispatch* pdispIn, LCID lcid, BYTE* pbOut); #define VarUI1FromDisp WINELIB_NAME(VarUI1FromDisp) -HRESULT WINAPI VarUI1FromCy32(CY cyIn, BYTE* pbOut); -#define VarUI1FromCy WINELIB_NAME(VarUI1FromCy) */ HRESULT WINAPI VarI2FromUI132(BYTE bIn, short* psOut); @@ -326,13 +326,13 @@ HRESULT WINAPI VarI2FromUI432(ULONG ulIn, short*psOut); #define VarI2FromUI4 WINELIB_NAME(VarI2FromUI4) HRESULT WINAPI VarI2FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, short* psOut); #define VarI2FromStr WINELIB_NAME(VarI2FromStr) +HRESULT WINAPI VarI2FromCy32(CY cyIn, short* psOut); +#define VarI2FromCy WINELIB_NAME(VarI2FromCy) /* HRESULT WINAPI VarI2FromDec32(DECIMAL*pdecIn, short*psOut); #define VarI2FromDec WINELIB_NAME(VarI2FromDec) HRESULT WINAPI VarI2FromDisp32(IDispatch* pdispIn, LCID lcid, short* psOut); #define VarI2FromDisp WINELIB_NAME(VarI2FromDisp) -HRESULT WINAPI VarI2FromCy32(CY cyIn, short* psOut); -#define VarI2FromCy WINELIB_NAME(VarI2FromCy) */ HRESULT WINAPI VarI4FromUI132(BYTE bIn, LONG* plOut); @@ -355,9 +355,9 @@ HRESULT WINAPI VarI4FromUI432(ULONG ulIn, LONG*plOut); #define VarI4FromUI4 WINELIB_NAME(VarI4FromUI4) HRESULT WINAPI VarI4FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, LONG* plOut); #define VarI4FromStr WINELIB_NAME(VarI4FromStr) -/* HRESULT WINAPI VarI4FromCy32(CY cyIn, LONG* plOut); #define VarI4FromCy WINELIB_NAME(VarI4FromCy) +/* HRESULT WINAPI VarI4FromDec32(DECIMAL*pdecIn, LONG*plOut); #define VarI4FromDec WINELIB_NAME(VarI4FromDec) HRESULT WINAPI VarI4FromDisp32(IDispatch* pdispIn, LCID lcid, LONG* plOut); @@ -384,13 +384,13 @@ HRESULT WINAPI VarR4FromUI432(ULONG ulIn, FLOAT*pfltOut); #define VarR4FromUI4 WINELIB_NAME(VarR4FromUI4) HRESULT WINAPI VarR4FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, FLOAT*pfltOut); #define VarR4FromStr WINELIB_NAME(VarR4FromStr) +HRESULT WINAPI VarR4FromCy32(CY cyIn, FLOAT* pfltOut); +#define VarR4FromCy WINELIB_NAME(VarR4FromCy) /* HRESULT WINAPI VarR4FromDec32(DECIMAL*pdecIn, FLOAT*pfltOut); #define VarR4FromDec WINELIB_NAME(VarR4FromDec) HRESULT WINAPI VarR4FromDisp32(IDispatch* pdispIn, LCID lcid, FLOAT* pfltOut); #define VarR4FromDisp WINELIB_NAME(VarR4FromDisp) -HRESULT WINAPI VarR4FromCy32(CY cyIn, FLOAT* pfltOut); -#define VarR4FromCy WINELIB_NAME(VarR4FromCy) */ HRESULT WINAPI VarR8FromUI132(BYTE bIn, double* pdblOut); @@ -413,11 +413,11 @@ HRESULT WINAPI VarR8FromUI432(ULONG ulIn, double*pdblOut); #define VarR8FromUI4 WINELIB_NAME(VarR8FromUI4) HRESULT WINAPI VarR8FromStr32(OLECHAR32*strIn, LCID lcid, ULONG dwFlags, double*pdblOut); #define VarR8FromStr WINELIB_NAME(VarR8FromStr) +HRESULT WINAPI VarR8FromCy32(CY cyIn, double* pdblOut); +#define VarR8FromCy WINELIB_NAME(VarR8FromCy) /* HRESULT WINAPI VarR8FromDec32(DECIMAL*pdecIn, double*pdblOut); #define VarR8FromDec WINELIB_NAME(VarR8FromDec) -HRESULT WINAPI VarR8FromCy32(CY cyIn, double* pdblOut); -#define VarR8FromCy WINELIB_NAME(VarR8FromCy) HRESULT WINAPI VarR8FromDisp32(IDispatch* pdispIn, LCID lcid, double* pdblOut); #define VarR8FromDisp WINELIB_NAME(VarR8FromDisp) */ @@ -442,14 +442,14 @@ HRESULT WINAPI VarDateFromUI432(ULONG ulIn, DATE*pdateOut); #define VarDateFromUI4 WINELIB_NAME(VarDateFromUI4) HRESULT WINAPI VarDateFromBool32(VARIANT_BOOL boolIn, DATE* pdateOut); #define VarDateFromBool WINELIB_NAME(VarDateFromBool) +HRESULT WINAPI VarDateFromCy32(CY cyIn, DATE* pdateOut); +#define VarDateFromCy WINELIB_NAME(VarDateFromCy) /* HRESULT WINAPI VarDateFromDec32(DECIMAL*pdecIn, DATE*pdateOut); #define VarDateFromDec WINELIB_NAME(VarDateFromDec) HRESULT WINAPI VarDateFromDisp32(IDispatch* pdispIn, LCID lcid, DATE* pdateOut); #define VarDateFromDisp WINELIB_NAME(VarDateFromDisp) -HRESULT WINAPI VarDateFromCy32(CY cyIn, DATE* pdateOut); -#define VarDateFromCy WINELIB_NAME(VarDateFromCy) - +*/ HRESULT WINAPI VarCyFromUI132(BYTE bIn, CY* pcyOut); #define VarCyFromUI1 WINELIB_NAME(VarCyFromUI1) HRESULT WINAPI VarCyFromI232(short sIn, CY* pcyOut); @@ -462,10 +462,6 @@ HRESULT WINAPI VarCyFromR832(double dblIn, CY* pcyOut); #define VarCyFromR8 WINELIB_NAME(VarCyFromR8) HRESULT WINAPI VarCyFromDate32(DATE dateIn, CY* pcyOut); #define VarCyFromDate WINELIB_NAME(VarCyFromDate) -HRESULT WINAPI VarCyFromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, CY* pcyOut); -#define VarCyFromStr WINELIB_NAME(VarCyFromStr) -HRESULT WINAPI VarCyFromDisp32(IDispatch* pdispIn, LCID lcid, CY* pcyOut); -#define VarCyFromDisp WINELIB_NAME(VarCyFromDisp) HRESULT WINAPI VarCyFromBool32(VARIANT_BOOL boolIn, CY* pcyOut); #define VarCyFromBool WINELIB_NAME(VarCyFromBool) HRESULT WINAPI VarCyFromI132(CHAR cIn, CY*pcyOut); @@ -474,8 +470,13 @@ HRESULT WINAPI VarCyFromUI232(USHORT uiIn, CY*pcyOut); #define VarCyFromUI2 WINELIB_NAME(VarCyFromUI2) HRESULT WINAPI VarCyFromUI432(ULONG ulIn, CY*pcyOut); #define VarCyFromUI4 WINELIB_NAME(VarCyFromUI4) +/* HRESULT WINAPI VarCyFromDec32(DECIMAL*pdecIn, CY*pcyOut); #define VarCyFromDec WINELIB_NAME(VarCyFromDec) +HRESULT WINAPI VarCyFromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, CY* pcyOut); +#define VarCyFromStr WINELIB_NAME(VarCyFromStr) +HRESULT WINAPI VarCyFromDisp32(IDispatch* pdispIn, LCID lcid, CY* pcyOut); +#define VarCyFromDisp WINELIB_NAME(VarCyFromDisp) */ HRESULT WINAPI VarBstrFromUI132(BYTE bVal, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut); @@ -498,11 +499,11 @@ HRESULT WINAPI VarBstrFromUI232(USHORT uiIn, LCID lcid, ULONG dwFlags, BSTR32*pb #define VarBstrFromUI2 WINELIB_NAME(VarBstrFromUI2) HRESULT WINAPI VarBstrFromUI432(ULONG ulIn, LCID lcid, ULONG dwFlags, BSTR32*pbstrOut); #define VarBstrFromUI4 WINELIB_NAME(VarBstrFromUI4) +HRESULT WINAPI VarBstrFromCy32(CY cyIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut); +#define VarBstrFromCy WINELIB_NAME(VarBstrFromCy) /* HRESULT WINAPI VarBstrFromDec32(DECIMAL*pdecIn, LCID lcid, ULONG dwFlags, BSTR32*pbstrOut); #define VarBstrFromDec WINELIB_NAME(VarBstrFromDec) -HRESULT WINAPI VarBstrFromCy32(CY cyIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut); -#define VarBstrFromCy WINELIB_NAME(VarBstrFromCy) HRESULT WINAPI VarBstrFromDisp32(IDispatch* pdispIn, LCID lcid, ULONG dwFlags, BSTR32* pbstrOut); #define VarBstrFromDisp WINELIB_NAME(VarBstrFromDisp) */ @@ -527,11 +528,11 @@ HRESULT WINAPI VarBoolFromUI232(USHORT uiIn, VARIANT_BOOL*pboolOut); #define VarBoolFromUI2 WINELIB_NAME(VarBoolFromUI2) HRESULT WINAPI VarBoolFromUI432(ULONG ulIn, VARIANT_BOOL*pboolOut); #define VarBoolFromUI4 WINELIB_NAME(VarBoolFromUI4) +HRESULT WINAPI VarBoolFromCy32(CY cyIn, VARIANT_BOOL* pboolOut); +#define VarBoolFromCy WINELIB_NAME(VarBoolFromCy) /* HRESULT WINAPI VarBoolFromDec32(DECIMAL*pdecIn, VARIANT_BOOL*pboolOut); #define VarBoolFromDec WINELIB_NAME(VarBoolFromDec) -HRESULT WINAPI VarBoolFromCy32(CY cyIn, VARIANT_BOOL* pboolOut); -#define VarBoolFromCy WINELIB_NAME(VarBoolFromCy) HRESULT WINAPI VarBoolFromDisp32(IDispatch* pdispIn, LCID lcid, VARIANT_BOOL* pboolOut); #define VarBoolFromDisp WINELIB_NAME(VarBoolFromDisp) */ @@ -556,13 +557,13 @@ HRESULT WINAPI VarI1FromUI232(USHORT uiIn, CHAR*pcOut); #define VarI1FromUI2 WINELIB_NAME(VarI1FromUI2) HRESULT WINAPI VarI1FromUI432(ULONG ulIn, CHAR*pcOut); #define VarI1FromUI4 WINELIB_NAME(VarI1FromUI4) +HRESULT WINAPI VarI1FromCy32(CY cyIn, CHAR*pcOut); +#define VarI1FromCy WINELIB_NAME(VarI1FromCy) /* HRESULT WINAPI VarI1FromDec32(DECIMAL*pdecIn, CHAR*pcOut); #define VarI1FromDec WINELIB_NAME(VarI1FromDec) HRESULT WINAPI VarI1FromDisp32(IDispatch*pdispIn, LCID lcid, CHAR*pcOut); #define VarI1FromDisp WINELIB_NAME(VarI1FromDisp) -HRESULT WINAPI VarI1FromCy32(CY cyIn, CHAR*pcOut); -#define VarI1FromCy WINELIB_NAME(VarI1FromCy) */ HRESULT WINAPI VarUI2FromUI132(BYTE bIn, USHORT*puiOut); @@ -585,11 +586,11 @@ HRESULT WINAPI VarUI2FromI132(CHAR cIn, USHORT*puiOut); #define VarUI2FromI1 WINELIB_NAME(VarUI2FromI1) HRESULT WINAPI VarUI2FromUI432(ULONG ulIn, USHORT*puiOut); #define VarUI2FromUI4 WINELIB_NAME(VarUI2FromUI4) +HRESULT WINAPI VarUI2FromCy32(CY cyIn, USHORT*puiOut); +#define VarUI2FromCy WINELIB_NAME(VarUI2FromCy) /* HRESULT WINAPI VarUI2FromDec32(DECIMAL*pdecIn, USHORT*puiOut); #define VarUI2FromDec WINELIB_NAME(VarUI2FromDec) -HRESULT WINAPI VarUI2FromCy32(CY cyIn, USHORT*puiOut); -#define VarUI2FromCy WINELIB_NAME(VarUI2FromCy) HRESULT WINAPI VarUI2FromDisp32(IDispatch*pdispIn, LCID lcid, USHORT*puiOut); #define VarUI2FromDisp WINELIB_NAME(VarUI2FromDisp) */ @@ -614,13 +615,13 @@ HRESULT WINAPI VarUI4FromI132(CHAR cIn, ULONG*pulOut); #define VarUI4FromI1 WINELIB_NAME(VarUI4FromI1) HRESULT WINAPI VarUI4FromUI232(USHORT uiIn, ULONG*pulOut); #define VarUI4FromUI2 WINELIB_NAME(VarUI4FromUI2) +HRESULT WINAPI VarUI4FromCy32(CY cyIn, ULONG*pulOut); +#define VarUI4FromCy WINELIB_NAME(VarUI4FromCy) /* HRESULT WINAPI VarUI4FromDec32(DECIMAL*pdecIn, ULONG*pulOut); #define VarUI4FromDec WINELIB_NAME(VarUI4FromDec) HRESULT WINAPI VarUI4FromDisp32(IDispatch*pdispIn, LCID lcid, ULONG*pulOut); #define VarUI4FromDisp WINELIB_NAME(VarUI4FromDisp) -HRESULT WINAPI VarUI4FromCy32(CY cyIn, ULONG*pulOut); -#define VarUI4FromCy WINELIB_NAME(VarUI4FromCy) HRESULT WINAPI VarDecFromUI132(BYTE bIn, DECIMAL*pdecOut); #define VarDecFromUI1 WINELIB_NAME(VarDecFromUI1) diff --git a/include/win16drv.h b/include/win16drv.h index 6515d2f5334..8ff174b56b6 100644 --- a/include/win16drv.h +++ b/include/win16drv.h @@ -110,8 +110,6 @@ typedef struct PDEVICE_HEADER LOADED_PRINTER_DRIVER *pLPD; /* Associated printer driver */ } PDEVICE_HEADER; -typedef short SHORT; - #pragma pack(1) #define PCOLOR DWORD typedef struct DRAWMODE diff --git a/include/wintypes.h b/include/wintypes.h index 35b21ee4510..068e95ee4bb 100644 --- a/include/wintypes.h +++ b/include/wintypes.h @@ -80,6 +80,7 @@ typedef unsigned long DWORD; typedef unsigned long ULONG; typedef unsigned char BYTE; typedef long LONG; +typedef short SHORT; typedef unsigned short USHORT; typedef char CHAR; typedef unsigned char UCHAR; @@ -87,6 +88,11 @@ typedef unsigned char UCHAR; typedef unsigned short WCHAR; typedef unsigned short BOOL16; typedef int BOOL32; +typedef double DATE; +#ifdef __i386__ +typedef double LONGLONG; +typedef double ULONGLONG; +#endif /*__i386__*/ /* Integer types. These are the same for emulator and library. */ diff --git a/ole/compobj.c b/ole/compobj.c index e81b2ffe60f..97e5331b48c 100644 --- a/ole/compobj.c +++ b/ole/compobj.c @@ -448,7 +448,7 @@ sizeof((i).ifr_name)+(i).ifr_addr.sa_len) TRACE(ole, "%p", pguid); - return 1; + return S_OK; } /****************************************************************************** diff --git a/ole/variant.c b/ole/variant.c index cdd58a5df5c..7eaf58d27ac 100644 --- a/ole/variant.c +++ b/ole/variant.c @@ -19,10 +19,12 @@ * working on this. */ +#include "wintypes.h" #include "oleauto.h" #include "heap.h" #include "debug.h" #include "winerror.h" +#include "mapidefs.h" #include #include @@ -41,7 +43,7 @@ static const short I2_MIN = -32768; static const unsigned long UI4_MAX = 4294967295; static const unsigned long UI4_MIN = 0; static const long I4_MAX = 2147483647; -static const long I4_MIN = -2147483648.0; +static const long I4_MIN = -2147483648; static const DATE DATE_MIN = -657434; static const DATE DATE_MAX = 2958465; @@ -138,20 +140,18 @@ static BSTR32 StringDupAtoBstr( char* strIn ) */ static double round( double d ) { - double decimals = 0.0; - unsigned long integerValue = 0.0; - double roundedValue = 0.0; + double decimals = 0.0, integerValue = 0.0, roundedValue = 0.0; BOOL32 bEvenNumber = FALSE; int nSign = 0; /* Save the sign of the number */ - nSign = d >= 0.0 ? 1 : -1; + nSign = (d >= 0.0) ? 1 : -1; d = fabs( d ); /* Remove the decimals. */ - integerValue = (unsigned long) d; + integerValue = floor( d ); /* Set the Even flag. This is used to round the number when * the decimals are exactly 1/2. If the integer part is @@ -159,7 +159,7 @@ static double round( double d ) * is even the number is rounded down. Using this method * numbers are rounded up|down half the time. */ - bEvenNumber = ((integerValue % 2) == 0) ? TRUE : FALSE; + bEvenNumber = (((short)fmod(integerValue, 2)) == 0) ? TRUE : FALSE; /* Remove the integral part of the number. */ @@ -198,7 +198,6 @@ static double round( double d ) return roundedValue * nSign; } - /****************************************************************************** * RemoveCharacterFromString [INTERNAL] * @@ -535,7 +534,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarI1FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cVal) ); break; case( VT_CY ): - /*res = VarI1FromCY32( ps->u.cyVal, &(pd->u.cVal) );*/ + res = VarI1FromCy32( ps->u.cyVal, &(pd->u.cVal) ); case( VT_DISPATCH ): /*res = VarI1FromDisp32( ps->u.pdispVal, lcid, &(pd->u.cVal) );*/ case( VT_UNKNOWN ): @@ -588,7 +587,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarI2FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.iVal) ); break; case( VT_CY ): - /*res = VarI2FromCY32( ps->u.cyVal, &(pd->u.iVal) );*/ + res = VarI2FromCy32( ps->u.cyVal, &(pd->u.iVal) ); case( VT_DISPATCH ): /*res = VarI2FromDisp32( ps->u.pdispVal, lcid, &(pd->u.iVal) );*/ case( VT_UNKNOWN ): @@ -642,7 +641,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarI4FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.lVal) ); break; case( VT_CY ): - /*res = VarI4FromCY32( ps->u.cyVal, &(pd->u.lVal) );*/ + res = VarI4FromCy32( ps->u.cyVal, &(pd->u.lVal) ); case( VT_DISPATCH ): /*res = VarI4FromDisp32( ps->u.pdispVal, lcid, &(pd->u.lVal) );*/ case( VT_UNKNOWN ): @@ -695,7 +694,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarUI1FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.bVal) ); break; case( VT_CY ): - /*res = VarUI1FromCY32( ps->u.cyVal, &(pd->u.bVal) );*/ + res = VarUI1FromCy32( ps->u.cyVal, &(pd->u.bVal) ); case( VT_DISPATCH ): /*res = VarUI1FromDisp32( ps->u.pdispVal, lcid, &(pd->u.bVal) );*/ case( VT_UNKNOWN ): @@ -748,7 +747,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarUI2FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.uiVal) ); break; case( VT_CY ): - /*res = VarUI2FromCY32( ps->u.cyVal, &(pd->u.uiVal) );*/ + res = VarUI2FromCy32( ps->u.cyVal, &(pd->u.uiVal) ); case( VT_DISPATCH ): /*res = VarUI2FromDisp32( ps->u.pdispVal, lcid, &(pd->u.uiVal) );*/ case( VT_UNKNOWN ): @@ -801,7 +800,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarUI4FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.ulVal) ); break; case( VT_CY ): - /*res = VarUI4FromCY32( ps->u.cyVal, &(pd->u.ulVal) );*/ + res = VarUI4FromCy32( ps->u.cyVal, &(pd->u.ulVal) ); case( VT_DISPATCH ): /*res = VarUI4FromDisp32( ps->u.pdispVal, lcid, &(pd->u.ulVal) );*/ case( VT_UNKNOWN ): @@ -854,7 +853,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarR4FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.fltVal) ); break; case( VT_CY ): - /*res = VarR4FromCY32( ps->u.cyVal, &(pd->u.fltVal) );*/ + res = VarR4FromCy32( ps->u.cyVal, &(pd->u.fltVal) ); case( VT_DISPATCH ): /*res = VarR4FromDisp32( ps->u.pdispVal, lcid, &(pd->u.fltVal) );*/ case( VT_UNKNOWN ): @@ -907,7 +906,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarR8FromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.dblVal) ); break; case( VT_CY ): - /*res = VarR8FromCY32( ps->u.cyVal, &(pd->u.dblVal) );*/ + res = VarR8FromCy32( ps->u.cyVal, &(pd->u.dblVal) ); case( VT_DISPATCH ): /*res = VarR8FromDisp32( ps->u.pdispVal, lcid, &(pd->u.dblVal) );*/ case( VT_UNKNOWN ): @@ -964,7 +963,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarDateFromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.date) ); break; case( VT_CY ): - /*res = VarDateFromCY32( ps->u.cyVal, &(pd->u.date) );*/ + res = VarDateFromCy32( ps->u.cyVal, &(pd->u.date) ); case( VT_DISPATCH ): /*res = VarDateFromDisp32( ps->u.pdispVal, lcid, &(pd->u.date) );*/ case( VT_UNKNOWN ): @@ -1021,7 +1020,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VarBoolFromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.boolVal) ); break; case( VT_CY ): - /*res = VarBoolFromCY32( ps->u.cyVal, &(pd->u.boolVal) );*/ + res = VarBoolFromCy32( ps->u.cyVal, &(pd->u.boolVal) ); case( VT_DISPATCH ): /*res = VarBoolFromDisp32( ps->u.pdispVal, lcid, &(pd->u.boolVal) );*/ case( VT_UNKNOWN ): @@ -1078,7 +1077,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, res = VariantCopy32( pd, ps ); break; case( VT_CY ): - /*res = VarBstrFromCY32( ps->u.cyVal, lcid, dwFlags, &(pd->u.bstrVal) );*/ + /*res = VarBstrFromCy32( ps->u.cyVal, lcid, dwFlags, &(pd->u.bstrVal) );*/ case( VT_DISPATCH ): /*res = VarBstrFromDisp32( ps->u.pdispVal, lcid, lcid, dwFlags, &(pd->u.bstrVal) );*/ case( VT_UNKNOWN ): @@ -1092,6 +1091,63 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, } break; + case( VT_CY ): + switch( vtFrom ) + { + case( VT_I1 ): + res = VarCyFromI132( ps->u.cVal, &(pd->u.cyVal) ); + break; + case( VT_I2 ): + res = VarCyFromI232( ps->u.iVal, &(pd->u.cyVal) ); + break; + case( VT_INT ): + res = VarCyFromInt32( ps->u.intVal, &(pd->u.cyVal) ); + break; + case( VT_I4 ): + res = VarCyFromI432( ps->u.lVal, &(pd->u.cyVal) ); + break; + case( VT_UI1 ): + res = VarCyFromUI132( ps->u.bVal, &(pd->u.cyVal) ); + break; + case( VT_UI2 ): + res = VarCyFromUI232( ps->u.uiVal, &(pd->u.cyVal) ); + break; + case( VT_UINT ): + res = VarCyFromUint32( ps->u.uintVal, &(pd->u.cyVal) ); + break; + case( VT_UI4 ): + res = VarCyFromUI432( ps->u.ulVal, &(pd->u.cyVal) ); + break; + case( VT_R4 ): + res = VarCyFromR432( ps->u.fltVal, &(pd->u.cyVal) ); + break; + case( VT_R8 ): + res = VarCyFromR832( ps->u.dblVal, &(pd->u.cyVal) ); + break; + case( VT_DATE ): + res = VarCyFromDate32( ps->u.date, &(pd->u.cyVal) ); + break; + case( VT_BOOL ): + res = VarCyFromBool32( ps->u.date, &(pd->u.cyVal) ); + break; + case( VT_CY ): + res = VariantCopy32( pd, ps ); + break; + case( VT_BSTR ): + /*res = VarCyFromStr32( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cyVal) );*/ + case( VT_DISPATCH ): + /*res = VarCyFromDisp32( ps->u.pdispVal, lcid, &(pd->u.boolVal) );*/ + case( VT_UNKNOWN ): + /*res = VarCyFrom32( ps->u.lVal, &(pd->u.boolVal) );*/ + case( VT_DECIMAL ): + /*res = VarCyFromDec32( ps->u.deiVal, &(pd->u.boolVal) );*/ + default: + res = DISP_E_TYPEMISMATCH; + FIXME(ole,"Coercion from %d to %d\n", vtFrom, vt ); + break; + } + break; + default: res = DISP_E_TYPEMISMATCH; FIXME(ole,"Coercion from %d to %d\n", vtFrom, vt ); @@ -1367,7 +1423,7 @@ HRESULT WINAPI VariantCopyInd32(VARIANT* pvargDest, VARIANTARG* pvargSrc) { /* Prevent from cycling. According to tests on * VariantCopyInd in Windows and the documentation - * this API dereferences the inner Variants to only on depth. + * this API dereferences the inner Variants to only one depth. * If the inner Variant itself contains an * other inner variant the E_INVALIDARG error is * returned. @@ -1707,6 +1763,19 @@ HRESULT WINAPI VarUI1FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, BYTE* return S_OK; } +/********************************************************************** + * VarUI1FromCy32 [OLEAUT32.134] + * Convert currency to unsigned char + */ +HRESULT WINAPI VarUI1FromCy32(CY cyIn, BYTE* pbOut) { + double t = round((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + if (t > UI1_MAX || t < UI1_MIN) return DISP_E_OVERFLOW; + + *pbOut = (BYTE)t; + return S_OK; +} + /****************************************************************************** * VarI2FromUI132 [OLEAUT32.48] */ @@ -1900,6 +1969,19 @@ HRESULT WINAPI VarI2FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, short* return S_OK; } +/********************************************************************** + * VarI2FromCy32 [OLEAUT32.52] + * Convert currency to signed short + */ +HRESULT WINAPI VarI2FromCy32(CY cyIn, short* psOut) { + double t = round((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + if (t > I2_MAX || t < I2_MIN) return DISP_E_OVERFLOW; + + *psOut = (SHORT)t; + return S_OK; +} + /****************************************************************************** * VarI4FromUI132 [OLEAUT32.58] */ @@ -2080,6 +2162,19 @@ HRESULT WINAPI VarI4FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, LONG* return S_OK; } +/********************************************************************** + * VarI4FromCy32 [OLEAUT32.62] + * Convert currency to signed long + */ +HRESULT WINAPI VarI4FromCy32(CY cyIn, LONG* plOut) { + double t = round((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + if (t > I4_MAX || t < I4_MIN) return DISP_E_OVERFLOW; + + *plOut = (LONG)t; + return S_OK; +} + /****************************************************************************** * VarR4FromUI132 [OLEAUT32.68] */ @@ -2241,6 +2336,16 @@ HRESULT WINAPI VarR4FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, FLOAT* return S_OK; } +/********************************************************************** + * VarR4FromCy32 [OLEAUT32.72] + * Convert currency to float + */ +HRESULT WINAPI VarR4FromCy32(CY cyIn, FLOAT* pfltOut) { + *pfltOut = (FLOAT)((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + return S_OK; +} + /****************************************************************************** * VarR8FromUI132 [OLEAUT32.68] */ @@ -2381,6 +2486,16 @@ HRESULT WINAPI VarR8FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, double return S_OK; } +/********************************************************************** + * VarR8FromCy32 [OLEAUT32.82] + * Convert currency to double + */ +HRESULT WINAPI VarR8FromCy32(CY cyIn, double* pdblOut) { + *pdblOut = (double)((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + return S_OK; +} + /****************************************************************************** * VarDateFromUI132 [OLEAUT32.] */ @@ -2554,6 +2669,16 @@ HRESULT WINAPI VarDateFromBool32(VARIANT_BOOL boolIn, DATE* pdateOut) return S_OK; } +/********************************************************************** + * VarDateFromCy32 [OLEAUT32.93] + * Convert currency to date + */ +HRESULT WINAPI VarDateFromCy32(CY cyIn, DATE* pdateOut) { + *pdateOut = (DATE)((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + if (*pdateOut > DATE_MAX || *pdateOut < DATE_MIN) return DISP_E_TYPEMISMATCH; + return S_OK; +} /****************************************************************************** * VarBstrFromUI132 [OLEAUT32.108] @@ -3050,6 +3175,17 @@ HRESULT WINAPI VarBoolFromUI432(ULONG ulIn, VARIANT_BOOL* pboolOut) return S_OK; } +/********************************************************************** + * VarBoolFromCy32 [OLEAUT32.124] + * Convert currency to boolean + */ +HRESULT WINAPI VarBoolFromCy32(CY cyIn, VARIANT_BOOL* pboolOut) { + if (cyIn.u.Hi || cyIn.u.Lo) *pboolOut = -1; + else *pboolOut = 0; + + return S_OK; +} + /****************************************************************************** * VarI1FromUI132 [OLEAUT32.244] */ @@ -3243,6 +3379,19 @@ HRESULT WINAPI VarI1FromUI432(ULONG ulIn, CHAR* pcOut) return S_OK; } +/********************************************************************** + * VarI1FromCy32 [OLEAUT32.250] + * Convert currency to signed char + */ +HRESULT WINAPI VarI1FromCy32(CY cyIn, CHAR* pcOut) { + double t = round((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + if (t > CHAR_MAX || t < CHAR_MIN) return DISP_E_OVERFLOW; + + *pcOut = (CHAR)t; + return S_OK; +} + /****************************************************************************** * VarUI2FromUI132 [OLEAUT32.257] */ @@ -3464,6 +3613,20 @@ HRESULT WINAPI VarUI4FromStr32(OLECHAR32* strIn, LCID lcid, ULONG dwFlags, ULONG return S_OK; } +/********************************************************************** + * VarUI2FromCy32 [OLEAUT32.263] + * Convert currency to unsigned short + */ +HRESULT WINAPI VarUI2FromCy32(CY cyIn, USHORT* pusOut) { + double t = round((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + if (t > UI2_MAX || t < UI2_MIN) return DISP_E_OVERFLOW; + + *pusOut = (USHORT)t; + + return S_OK; +} + /****************************************************************************** * VarUI4FromUI132 [OLEAUT32.270] */ @@ -3598,3 +3761,138 @@ HRESULT WINAPI VarUI4FromUI232(USHORT uiIn, ULONG* pulOut) return S_OK; } +/********************************************************************** + * VarUI4FromCy32 [OLEAUT32.276] + * Convert currency to unsigned long + */ +HRESULT WINAPI VarUI4FromCy32(CY cyIn, ULONG* pulOut) { + double t = round((((double)cyIn.u.Hi * 4294967296) + (double)cyIn.u.Lo) / 10000); + + if (t > UI4_MAX || t < UI4_MIN) return DISP_E_OVERFLOW; + + *pulOut = (ULONG)t; + + return S_OK; +} + +/********************************************************************** + * VarCyFromUI132 [OLEAUT32.98] + * Convert unsigned char to currency + */ +HRESULT WINAPI VarCyFromUI132(BYTE bIn, CY* pcyOut) { + pcyOut->u.Hi = 0; + pcyOut->u.Lo = ((ULONG)bIn) * 10000; + + return S_OK; +} + +/********************************************************************** + * VarCyFromI232 [OLEAUT32.99] + * Convert signed short to currency + */ +HRESULT WINAPI VarCyFromI232(short sIn, CY* pcyOut) { + if (sIn < 0) pcyOut->u.Hi = -1; + else pcyOut->u.Hi = 0; + pcyOut->u.Lo = ((ULONG)sIn) * 10000; + + return S_OK; +} + +/********************************************************************** + * VarCyFromI432 [OLEAUT32.100] + * Convert signed long to currency + */ +HRESULT WINAPI VarCyFromI432(LONG lIn, CY* pcyOut) { + double t = (double)lIn * (double)10000; + pcyOut->u.Hi = (LONG)(t / (double)4294967296); + pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296); + if (lIn < 0) pcyOut->u.Hi--; + + return S_OK; +} + +/********************************************************************** + * VarCyFromR432 [OLEAUT32.101] + * Convert float to currency + */ +HRESULT WINAPI VarCyFromR432(FLOAT fltIn, CY* pcyOut) { + double t = round((double)fltIn * (double)10000); + pcyOut->u.Hi = (LONG)(t / (double)4294967296); + pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296); + if (fltIn < 0) pcyOut->u.Hi--; + + return S_OK; +} + +/********************************************************************** + * VarCyFromR832 [OLEAUT32.102] + * Convert double to currency + */ +HRESULT WINAPI VarCyFromR832(double dblIn, CY* pcyOut) { + double t = round(dblIn * (double)10000); + pcyOut->u.Hi = (LONG)(t / (double)4294967296); + pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296); + if (dblIn < 0) pcyOut->u.Hi--; + + return S_OK; +} + +/********************************************************************** + * VarCyFromDate32 [OLEAUT32.103] + * Convert date to currency + */ +HRESULT WINAPI VarCyFromDate32(DATE dateIn, CY* pcyOut) { + double t = round((double)dateIn * (double)10000); + pcyOut->u.Hi = (LONG)(t / (double)4294967296); + pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296); + if (dateIn < 0) pcyOut->u.Hi--; + + return S_OK; +} + +/********************************************************************** + * VarCyFromBool32 [OLEAUT32.106] + * Convert boolean to currency + */ +HRESULT WINAPI VarCyFromBool32(VARIANT_BOOL boolIn, CY* pcyOut) { + if (boolIn < 0) pcyOut->u.Hi = -1; + else pcyOut->u.Hi = 0; + pcyOut->u.Lo = (ULONG)boolIn * (ULONG)10000; + + return S_OK; +} + +/********************************************************************** + * VarCyFromI132 [OLEAUT32.225] + * Convert signed char to currency + */ +HRESULT WINAPI VarCyFromI132(CHAR cIn, CY* pcyOut) { + if (cIn < 0) pcyOut->u.Hi = -1; + else pcyOut->u.Hi = 0; + pcyOut->u.Lo = (ULONG)cIn * (ULONG)10000; + + return S_OK; +} + +/********************************************************************** + * VarCyFromUI232 [OLEAUT32.226] + * Convert unsigned short to currency + */ +HRESULT WINAPI VarCyFromUI232(USHORT usIn, CY* pcyOut) { + pcyOut->u.Hi = 0; + pcyOut->u.Lo = (ULONG)usIn * (ULONG)10000; + + return S_OK; +} + +/********************************************************************** + * VarCyFromUI432 [OLEAUT32.227] + * Convert unsigned long to currency + */ +HRESULT WINAPI VarCyFromUI432(ULONG ulIn, CY* pcyOut) { + double t = (double)ulIn * (double)10000; + pcyOut->u.Hi = (LONG)(t / (double)4294967296); + pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296); + + return S_OK; +} diff --git a/relay32/oleaut32.spec b/relay32/oleaut32.spec index b5b3a1e1595..6d5cefe6483 100644 --- a/relay32/oleaut32.spec +++ b/relay32/oleaut32.spec @@ -48,7 +48,7 @@ type win32 49 stdcall VarI2FromI4(long ptr) VarI2FromI432 50 stdcall VarI2FromR4(long ptr) VarI2FromR432 51 stdcall VarI2FromR8(double ptr) VarI2FromR832 -52 stub VarI2FromCy +52 stdcall VarI2FromCy(double ptr) VarI2FromCy32 53 stdcall VarI2FromDate(long ptr) VarI2FromDate32 54 stdcall VarI2FromStr(wstr long long ptr) VarI2FromStr32 55 stub VarI2FromDisp @@ -57,7 +57,7 @@ type win32 59 stdcall VarI4FromI2(long ptr) VarI4FromI232 60 stdcall VarI4FromR4(long ptr) VarI4FromR432 61 stdcall VarI4FromR8(double ptr) VarI4FromR832 -62 stub VarI4FromCy +62 stdcall VarI4FromCy(double ptr) VarI4FromCy32 63 stdcall VarI4FromDate(long ptr) VarI4FromDate32 64 stdcall VarI4FromStr(wstr long long ptr) VarI4FromStr32 65 stub VarI4FromDisp @@ -66,7 +66,7 @@ type win32 69 stdcall VarR4FromI2(long ptr) VarR4FromI232 70 stdcall VarR4FromI4(long ptr) VarR4FromI432 71 stdcall VarR4FromR8(double ptr) VarR4FromR832 -72 stub VarR4FromCy +72 stdcall VarR4FromCy(double ptr) VarR4FromCy32 73 stdcall VarR4FromDate(long ptr) VarR4FromDate32 74 stdcall VarR4FromStr(wstr long long ptr) VarR4FromStr32 75 stub VarR4FromDisp @@ -75,7 +75,7 @@ type win32 79 stdcall VarR8FromI2(long ptr) VarR8FromI232 80 stdcall VarR8FromI4(long ptr) VarR8FromI432 81 stdcall VarR8FromR4(long ptr) VarR8FromR432 -82 stub VarR8FromCy +82 stdcall VarR8FromCy(double ptr) VarR8FromCy32 83 stdcall VarR8FromDate(long ptr) VarR8FromDate32 84 stdcall VarR8FromStr(wstr long long ptr) VarR8FromStr32 85 stub VarR8FromDisp @@ -85,19 +85,19 @@ type win32 90 stdcall VarDateFromI4(long ptr) VarDateFromI432 91 stdcall VarDateFromR4(long ptr) VarDateFromR432 92 stdcall VarDateFromR8(double ptr) VarDateFromR832 -93 stub VarDateFromCy +93 stdcall VarDateFromCy(double ptr) VarDateFromCy32 94 stdcall VarDateFromStr(wstr long long ptr) VarDateFromStr32 95 stub VarDateFromDisp 96 stdcall VarDateFromBool(long ptr) VarDateFromBool32 -98 stub VarCyFromUI1 -99 stub VarCyFromI2 -100 stub VarCyFromI4 -101 stub VarCyFromR4 -102 stub VarCyFromR8 -103 stub VarCyFromDate +98 stdcall VarCyFromUI1(long ptr) VarCyFromUI132 +99 stdcall VarCyFromI2(long ptr) VarCyFromI232 +100 stdcall VarCyFromI4(long ptr) VarCyFromI432 +101 stdcall VarCyFromR4(long ptr) VarCyFromR432 +102 stdcall VarCyFromR8(double ptr) VarCyFromR832 +103 stdcall VarCyFromDate(double ptr) VarCyFromDate32 104 stub VarCyFromStr 105 stub VarCyFromDisp -106 stub VarCyFromBool +106 stdcall VarCyFromBool(long ptr) VarCyFromBool32 108 stdcall VarBstrFromUI1(long long long ptr) VarBstrFromUI132 109 stdcall VarBstrFromI2(long long long ptr) VarBstrFromI232 110 stdcall VarBstrFromI4(long long long ptr) VarBstrFromI432 @@ -113,14 +113,14 @@ type win32 121 stdcall VarBoolFromR4(long ptr) VarBoolFromR432 122 stdcall VarBoolFromR8(double ptr) VarBoolFromR832 123 stdcall VarBoolFromDate(long ptr) VarBoolFromDate32 -124 stub VarBoolFromCy +124 stdcall VarBoolFromCy(double ptr) VarBoolFromCy32 125 stdcall VarBoolFromStr(wstr long long ptr) VarBoolFromStr32 126 stub VarBoolFromDisp 130 stdcall VarUI1FromI2(long ptr) VarUI1FromI232 131 stdcall VarUI1FromI4(long ptr) VarUI1FromI432 132 stdcall VarUI1FromR4(long ptr) VarUI1FromR432 133 stdcall VarUI1FromR8(double ptr) VarUI1FromR832 -134 stub VarUI1FromCy +134 stdcall VarUI1FromCy(double ptr) VarUI1FromCy32 135 stdcall VarUI1FromDate(long ptr) VarUI1FromDate32 136 stdcall VarUI1FromStr(wstr long long ptr) VarUI1FromStr32 137 stub VarUI1FromDisp @@ -177,9 +177,9 @@ type win32 222 stdcall VarDateFromUI2(long ptr) VarDateFromUI232 223 stdcall VarDateFromUI4(long ptr) VarDateFromUI432 224 stub VarDateFromDec -225 stub VarCyFromI1 -226 stub VarCyFromUI2 -227 stub VarCyFromUI4 +225 stdcall VarCyFromI1(long ptr) VarCyFromI132 +226 stdcall VarCyFromUI2(long ptr) VarCyFromUI232 +227 stdcall VarCyFromUI4(long ptr) VarCyFromUI432 228 stub VarCyFromDec 229 stdcall VarBstrFromI1(long long long ptr) VarBstrFromI132 230 stdcall VarBstrFromUI2(long long long ptr) VarBstrFromUI232 @@ -202,7 +202,7 @@ type win32 247 stdcall VarI1FromR4(long ptr) VarI1FromR432 248 stdcall VarI1FromR8(double ptr) VarI1FromR832 249 stdcall VarI1FromDate(long ptr) VarI1FromDate32 -250 stub VarI1FromCy +250 stdcall VarI1FromCy(double ptr) VarI1FromCy32 251 stdcall VarI1FromStr(wstr long long ptr) VarI1FromStr32 252 stub VarI1FromDisp 253 stdcall VarI1FromBool(long ptr) VarI1FromBool32 @@ -215,7 +215,7 @@ type win32 260 stdcall VarUI2FromR4(long ptr) VarUI2FromR432 261 stdcall VarUI2FromR8(double ptr) VarUI2FromR832 262 stdcall VarUI2FromDate(long ptr) VarUI2FromDate32 -263 stub VarUI2FromCy +263 stdcall VarUI2FromCy(double ptr) VarUI2FromCy32 264 stdcall VarUI2FromStr(wstr long long ptr) VarUI2FromStr32 265 stub VarUI2FromDisp 266 stdcall VarUI2FromBool(long ptr) VarUI2FromBool32 @@ -228,7 +228,7 @@ type win32 273 stdcall VarUI4FromR4(long ptr) VarUI4FromR432 274 stdcall VarUI4FromR8(double ptr) VarUI4FromR832 275 stdcall VarUI4FromDate(long ptr) VarUI4FromDate32 -276 stub VarUI4FromCy +276 stdcall VarUI4FromCy(double ptr) VarUI4FromCy32 277 stdcall VarUI4FromStr(wstr long long ptr) VarUI4FromStr32 278 stub VarUI4FromDisp 279 stdcall VarUI4FromBool(long ptr) VarUI4FromBool32 -- 2.11.4.GIT