oleaut: Small re-organisation of ITypeInfo::Invoke.

Only output the one function in the trace for ITypeInfo::Invoke.
Process the return value on output in ITypeInfo::Invoke, but only copy
it to pVarResult if pVarResult is not NULL.
This commit is contained in:
Robert Shearman 2005-12-26 13:04:31 +01:00 committed by Alexandre Julliard
parent 6b97438011
commit e6fa361967
1 changed files with 36 additions and 32 deletions

View File

@ -5320,7 +5320,7 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
if (TRACE_ON(ole))
{
TRACE("invoking:\n");
dump_TLBFuncDesc(pFuncInfo);
dump_TLBFuncDescOne(pFuncInfo);
}
switch (func_desc->funckind) {
@ -5430,10 +5430,11 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
args
);
if (pVarResult) {
for (i = 0; i < func_desc->cParams; i++) {
for (i = 0; i < func_desc->cParams; i++)
{
USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags;
if (wParamFlags & PARAMFLAG_FRETVAL) {
if (wParamFlags & PARAMFLAG_FRETVAL)
{
ELEMDESC *elemdesc = &func_desc->lprgelemdescParam[i];
TYPEDESC *tdesc = &elemdesc->tdesc;
VARIANTARG varresult;
@ -5449,7 +5450,11 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
TRACE("varresult: ");
dump_Variant(&varresult);
}
if (pVarResult)
/* deref return value */
hres = VariantCopyInd(pVarResult, &varresult);
/* free data stored in varresult. Note that
* VariantClear doesn't do what we want because we are
* working with byref types. */
@ -5464,7 +5469,6 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
break;
}
}
}
if ((func_desc->elemdescFunc.tdesc.vt == VT_HRESULT) && FAILED(res))
{