From 5e8c877f96434db9c9dc3002d8f771986edbbed3 Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Wed, 3 May 2006 22:22:08 +0100 Subject: [PATCH] oleaut32: Support values being passed into VT_VARIANT|VT_BYREF typed parameters in ITypeInfo::Invoke. --- dlls/oleaut32/typelib.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 43dfb731787..9902cf9f3d2 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); -- 2.11.4.GIT