Module: wine Branch: master Commit: 21140a9a53a6cd025f1c83bbfd388a4632a28de6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=21140a9a53a6cd025f1c83bbfd...
Author: Rob Shearman rob@codeweavers.com Date: Tue Feb 6 19:25:27 2007 +0000
oleaut32: Add support for named arguments in ITypeInfo::Invoke.
---
dlls/oleaut32/typelib.c | 26 ++++++++++++++++++++++++-- 1 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index f61f460..508bb89 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -5485,6 +5485,29 @@ static HRESULT WINAPI ITypeInfo_fnInvoke for (i = 0; i < func_desc->cParams; i++) { USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags; + VARIANTARG *src_arg; + + if (pDispParams->cNamedArgs) + { + USHORT j; + src_arg = NULL; + for (j = 0; j < pDispParams->cNamedArgs; j++) + { + if ((func_desc->invkind & INVOKE_PROPERTYPUT) && + (pDispParams->rgdispidNamedArgs[j] == DISPID_PROPERTYPUT)) + { + src_arg = &pDispParams->rgvarg[0]; + break; + } + if (pDispParams->rgdispidNamedArgs[j] == i) + { + src_arg = &pDispParams->rgvarg[j]; + break; + } + } + } + else + src_arg = i < pDispParams->cArgs ? &pDispParams->rgvarg[pDispParams->cArgs - 1 - i] : NULL;
if (wParamFlags & PARAMFLAG_FRETVAL) { @@ -5507,9 +5530,8 @@ static HRESULT WINAPI ITypeInfo_fnInvoke break; } } - else if (i < pDispParams->cArgs) + else if (src_arg) { - VARIANTARG *src_arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - i]; dump_Variant(src_arg);
if (rgvt[i] == VT_VARIANT)