Module: wine Branch: refs/heads/master Commit: 5e8c877f96434db9c9dc3002d8f771986edbbed3 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=5e8c877f96434db9c9dc3002...
Author: Robert Shearman rob@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);