Robert Shearman : oleaut32: Support values being passed into VT_VARIANT|VT_BYREF typed parameters in ITypeInfo ::Invoke.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 5 15:24:18 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 5e8c877f96434db9c9dc3002d8f771986edbbed3
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=5e8c877f96434db9c9dc3002d8f771986edbbed3

Author: Robert Shearman <rob at codeweavers.com>
Date:   Wed May  3 22:22:08 2006 +0100

oleaut32: Support values being passed into VT_VARIANT|VT_BYREF typed parameters in ITypeInfo::Invoke.

---

 dlls/oleaut32/typelib.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 43dfb73..9902cf9 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -5240,6 +5240,18 @@ static HRESULT WINAPI ITypeInfo_fnInvoke
 
                     if (rgvt[i] == VT_VARIANT)
                         VariantCopy(&rgvarg[i], src_arg);
+                    else if (rgvt[i] == (VT_VARIANT | VT_BYREF))
+                    {
+                        if (rgvt[i] == V_VT(src_arg))
+                            V_VARIANTREF(&rgvarg[i]) = V_VARIANTREF(src_arg);
+                        else
+                        {
+                            VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams);
+                            hres = VariantCopy(&missing_arg[i], src_arg);
+                            V_VARIANTREF(&rgvarg[i]) = &missing_arg[i];
+                        }
+                        V_VT(&rgvarg[i]) = rgvt[i];
+                    }
                     else if ((rgvt[i] & VT_BYREF) && !V_ISBYREF(src_arg))
                     {
                         VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams);




More information about the wine-cvs mailing list