Alex Villacís Lasso : oleaut32: Support for VT_DISPATCH in VarInt.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jun 5 05:48:27 CDT 2007


Module: wine
Branch: master
Commit: f1b44b36e444eec84c46d418e6102d53ead76510
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f1b44b36e444eec84c46d418e6102d53ead76510

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Mon Jun  4 13:07:19 2007 -0500

oleaut32: Support for VT_DISPATCH in VarInt.

---

 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 a36a1b5..45bc9b6 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -4484,10 +4484,20 @@ VarFix_Exit:
 HRESULT WINAPI VarInt(LPVARIANT pVarIn, LPVARIANT pVarOut)
 {
     HRESULT hRet = S_OK;
+    VARIANT temp;
+
+    VariantInit(&temp);
 
     TRACE("(%p->(%s%s),%p)\n", pVarIn, debugstr_VT(pVarIn),
           debugstr_VF(pVarIn), pVarOut);
 
+    /* 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 VarInt_Exit;
+        pVarIn = &temp;
+    }
     V_VT(pVarOut) = V_VT(pVarIn);
 
     switch (V_VT(pVarIn))
@@ -4511,8 +4521,10 @@ HRESULT WINAPI VarInt(LPVARIANT pVarIn, LPVARIANT pVarOut)
         hRet = VarDecInt(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut));
         break;
     default:
-        return VarFix(pVarIn, pVarOut);
+        hRet = VarFix(pVarIn, pVarOut);
     }
+VarInt_Exit:
+    VariantClear(&temp);
 
     return hRet;
 }




More information about the wine-cvs mailing list