Alex Villacís Lasso : oleaut32: Support for VT_DISPATCH in VarRound.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jun 5 05:48:29 CDT 2007
Module: wine
Branch: master
Commit: 38079e074469a331604fc9edad3e2b5ca58472c4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=38079e074469a331604fc9edad3e2b5ca58472c4
Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date: Mon Jun 4 13:10:57 2007 -0500
oleaut32: Support for VT_DISPATCH in VarRound.
---
dlls/oleaut32/variant.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index 8068d6a..0540e95 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -5045,9 +5045,20 @@ HRESULT WINAPI VarRound(LPVARIANT pVarIn, int deci, LPVARIANT pVarOut)
VARIANT varIn;
HRESULT hRet = S_OK;
float factor;
+ VARIANT temp;
+
+ VariantInit(&temp);
TRACE("(%p->(%s%s),%d)\n", pVarIn, debugstr_VT(pVarIn), debugstr_VF(pVarIn), deci);
+ /* Handle VT_DISPATCH by storing and taking address of returned value */
+ if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))
+ {
+ hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);
+ if (FAILED(hRet)) goto VarRound_Exit;
+ pVarIn = &temp;
+ }
+
switch (V_VT(pVarIn))
{
/* cases that fail on windows */
@@ -5138,9 +5149,10 @@ HRESULT WINAPI VarRound(LPVARIANT pVarIn, int deci, LPVARIANT pVarOut)
V_VT(pVarIn) & VT_TYPEMASK, deci);
hRet = DISP_E_BADVARTYPE;
}
-
+VarRound_Exit:
if (FAILED(hRet))
V_VT(pVarOut) = VT_EMPTY;
+ VariantClear(&temp);
TRACE("returning 0x%08x (%s%s),%f\n", hRet, debugstr_VT(pVarOut),
debugstr_VF(pVarOut), (V_VT(pVarOut) == VT_R4) ? V_R4(pVarOut) :
More information about the wine-cvs
mailing list