Do not pass the high level wFlags from VariantChangeType* down to low
level Variant conversion functions.
This commit is contained in:
parent
e007b98e9b
commit
d23f0dbea2
|
@ -871,6 +871,9 @@ static BOOL IsValidRealString( LPSTR strRealString )
|
||||||
*
|
*
|
||||||
* This function dispatches execution to the proper conversion API
|
* This function dispatches execution to the proper conversion API
|
||||||
* to do the necessary coercion.
|
* to do the necessary coercion.
|
||||||
|
*
|
||||||
|
* FIXME: Passing down dwFlags to the conversion functions is wrong, this
|
||||||
|
* is a different flagmask. Check MSDN.
|
||||||
*/
|
*/
|
||||||
static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, VARTYPE vt )
|
static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps, VARTYPE vt )
|
||||||
{
|
{
|
||||||
|
@ -878,6 +881,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
unsigned short vtFrom = 0;
|
unsigned short vtFrom = 0;
|
||||||
vtFrom = ps->vt & VT_TYPEMASK;
|
vtFrom = ps->vt & VT_TYPEMASK;
|
||||||
|
|
||||||
|
|
||||||
/* Note: Since "long" and "int" values both have 4 bytes and are
|
/* Note: Since "long" and "int" values both have 4 bytes and are
|
||||||
* both signed integers "int" will be treated as "long" in the
|
* both signed integers "int" will be treated as "long" in the
|
||||||
* following code.
|
* following code.
|
||||||
|
@ -941,7 +945,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarI1FromBool( ps->u.boolVal, &(pd->u.cVal) );
|
res = VarI1FromBool( ps->u.boolVal, &(pd->u.cVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarI1FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cVal) );
|
res = VarI1FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.cVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarI1FromCy( ps->u.cyVal, &(pd->u.cVal) );
|
res = VarI1FromCy( ps->u.cyVal, &(pd->u.cVal) );
|
||||||
|
@ -994,7 +998,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarI2FromBool( ps->u.boolVal, &(pd->u.iVal) );
|
res = VarI2FromBool( ps->u.boolVal, &(pd->u.iVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarI2FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.iVal) );
|
res = VarI2FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.iVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarI2FromCy( ps->u.cyVal, &(pd->u.iVal) );
|
res = VarI2FromCy( ps->u.cyVal, &(pd->u.iVal) );
|
||||||
|
@ -1048,7 +1052,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarI4FromBool( ps->u.boolVal, &(pd->u.lVal) );
|
res = VarI4FromBool( ps->u.boolVal, &(pd->u.lVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarI4FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.lVal) );
|
res = VarI4FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.lVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarI4FromCy( ps->u.cyVal, &(pd->u.lVal) );
|
res = VarI4FromCy( ps->u.cyVal, &(pd->u.lVal) );
|
||||||
|
@ -1101,7 +1105,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarUI1FromBool( ps->u.boolVal, &(pd->u.bVal) );
|
res = VarUI1FromBool( ps->u.boolVal, &(pd->u.bVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarUI1FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.bVal) );
|
res = VarUI1FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.bVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarUI1FromCy( ps->u.cyVal, &(pd->u.bVal) );
|
res = VarUI1FromCy( ps->u.cyVal, &(pd->u.bVal) );
|
||||||
|
@ -1154,7 +1158,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarUI2FromBool( ps->u.boolVal, &(pd->u.uiVal) );
|
res = VarUI2FromBool( ps->u.boolVal, &(pd->u.uiVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarUI2FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.uiVal) );
|
res = VarUI2FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.uiVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarUI2FromCy( ps->u.cyVal, &(pd->u.uiVal) );
|
res = VarUI2FromCy( ps->u.cyVal, &(pd->u.uiVal) );
|
||||||
|
@ -1207,7 +1211,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarUI4FromBool( ps->u.boolVal, &(pd->u.ulVal) );
|
res = VarUI4FromBool( ps->u.boolVal, &(pd->u.ulVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarUI4FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.ulVal) );
|
res = VarUI4FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.ulVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarUI4FromCy( ps->u.cyVal, &(pd->u.ulVal) );
|
res = VarUI4FromCy( ps->u.cyVal, &(pd->u.ulVal) );
|
||||||
|
@ -1260,7 +1264,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarR4FromBool( ps->u.boolVal, &(pd->u.fltVal) );
|
res = VarR4FromBool( ps->u.boolVal, &(pd->u.fltVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarR4FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.fltVal) );
|
res = VarR4FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.fltVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarR4FromCy( ps->u.cyVal, &(pd->u.fltVal) );
|
res = VarR4FromCy( ps->u.cyVal, &(pd->u.fltVal) );
|
||||||
|
@ -1313,7 +1317,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarR8FromBool( ps->u.boolVal, &(pd->u.dblVal) );
|
res = VarR8FromBool( ps->u.boolVal, &(pd->u.dblVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarR8FromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.dblVal) );
|
res = VarR8FromStr( ps->u.bstrVal, lcid, 0, &(pd->u.dblVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarR8FromCy( ps->u.cyVal, &(pd->u.dblVal) );
|
res = VarR8FromCy( ps->u.cyVal, &(pd->u.dblVal) );
|
||||||
|
@ -1370,7 +1374,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VarDateFromBool( ps->u.boolVal, &(pd->u.date) );
|
res = VarDateFromBool( ps->u.boolVal, &(pd->u.date) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarDateFromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.date) );
|
res = VarDateFromStr( ps->u.bstrVal, lcid, 0, &(pd->u.date) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarDateFromCy( ps->u.cyVal, &(pd->u.date) );
|
res = VarDateFromCy( ps->u.cyVal, &(pd->u.date) );
|
||||||
|
@ -1427,7 +1431,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VariantCopy( pd, ps );
|
res = VariantCopy( pd, ps );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarBoolFromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.boolVal) );
|
res = VarBoolFromStr( ps->u.bstrVal, lcid, 0, &(pd->u.boolVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarBoolFromCy( ps->u.cyVal, &(pd->u.boolVal) );
|
res = VarBoolFromCy( ps->u.cyVal, &(pd->u.boolVal) );
|
||||||
|
@ -1454,51 +1458,51 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = E_OUTOFMEMORY;
|
res = E_OUTOFMEMORY;
|
||||||
break;
|
break;
|
||||||
case( VT_I1 ):
|
case( VT_I1 ):
|
||||||
res = VarBstrFromI1( ps->u.cVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromI1( ps->u.cVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_I2 ):
|
case( VT_I2 ):
|
||||||
res = VarBstrFromI2( ps->u.iVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromI2( ps->u.iVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_INT ):
|
case( VT_INT ):
|
||||||
res = VarBstrFromInt( ps->u.intVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromInt( ps->u.intVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_I4 ):
|
case( VT_I4 ):
|
||||||
res = VarBstrFromI4( ps->u.lVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromI4( ps->u.lVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_UI1 ):
|
case( VT_UI1 ):
|
||||||
res = VarBstrFromUI1( ps->u.bVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromUI1( ps->u.bVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_UI2 ):
|
case( VT_UI2 ):
|
||||||
res = VarBstrFromUI2( ps->u.uiVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromUI2( ps->u.uiVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_UINT ):
|
case( VT_UINT ):
|
||||||
res = VarBstrFromUint( ps->u.uintVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromUint( ps->u.uintVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_UI4 ):
|
case( VT_UI4 ):
|
||||||
res = VarBstrFromUI4( ps->u.ulVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromUI4( ps->u.ulVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_R4 ):
|
case( VT_R4 ):
|
||||||
res = VarBstrFromR4( ps->u.fltVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromR4( ps->u.fltVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_R8 ):
|
case( VT_R8 ):
|
||||||
res = VarBstrFromR8( ps->u.dblVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromR8( ps->u.dblVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_DATE ):
|
case( VT_DATE ):
|
||||||
res = VarBstrFromDate( ps->u.date, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromDate( ps->u.date, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BOOL ):
|
case( VT_BOOL ):
|
||||||
res = VarBstrFromBool( ps->u.boolVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromBool( ps->u.boolVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VariantCopy( pd, ps );
|
res = VariantCopy( pd, ps );
|
||||||
break;
|
break;
|
||||||
case( VT_CY ):
|
case( VT_CY ):
|
||||||
res = VarBstrFromCy( ps->u.cyVal, lcid, dwFlags, &(pd->u.bstrVal) );
|
res = VarBstrFromCy( ps->u.cyVal, lcid, 0, &(pd->u.bstrVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_DISPATCH ):
|
case( VT_DISPATCH ):
|
||||||
/*res = VarBstrFromDisp( ps->u.pdispVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
|
/*res = VarBstrFromDisp( ps->u.pdispVal, lcid, 0, &(pd->u.bstrVal) );*/
|
||||||
case( VT_DECIMAL ):
|
case( VT_DECIMAL ):
|
||||||
/*res = VarBstrFromDec( ps->u.deiVal, lcid, dwFlags, &(pd->u.bstrVal) );*/
|
/*res = VarBstrFromDec( ps->u.deiVal, lcid, 0, &(pd->u.bstrVal) );*/
|
||||||
case( VT_UNKNOWN ):
|
case( VT_UNKNOWN ):
|
||||||
default:
|
default:
|
||||||
res = DISP_E_TYPEMISMATCH;
|
res = DISP_E_TYPEMISMATCH;
|
||||||
|
@ -1550,7 +1554,7 @@ static HRESULT Coerce( VARIANTARG* pd, LCID lcid, ULONG dwFlags, VARIANTARG* ps,
|
||||||
res = VariantCopy( pd, ps );
|
res = VariantCopy( pd, ps );
|
||||||
break;
|
break;
|
||||||
case( VT_BSTR ):
|
case( VT_BSTR ):
|
||||||
res = VarCyFromStr( ps->u.bstrVal, lcid, dwFlags, &(pd->u.cyVal) );
|
res = VarCyFromStr( ps->u.bstrVal, lcid, 0, &(pd->u.cyVal) );
|
||||||
break;
|
break;
|
||||||
case( VT_DISPATCH ):
|
case( VT_DISPATCH ):
|
||||||
/*res = VarCyFromDisp( ps->u.pdispVal, lcid, &(pd->u.cyVal) );*/
|
/*res = VarCyFromDisp( ps->u.pdispVal, lcid, &(pd->u.cyVal) );*/
|
||||||
|
|
Loading…
Reference in New Issue