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