oleaut32: Support for VT_DISPATCH in VarFix.

This commit is contained in:
Alex Villacís Lasso 2007-06-04 13:04:45 -05:00 committed by Alexandre Julliard
parent 2ebe12397f
commit bd7de42787
1 changed files with 12 additions and 0 deletions

View File

@ -4377,10 +4377,20 @@ VarAbs_Exit:
HRESULT WINAPI VarFix(LPVARIANT pVarIn, LPVARIANT pVarOut)
{
HRESULT hRet = S_OK;
VARIANT temp;
VariantInit(&temp);
TRACE("(%p->(%s%s),%p)\n", pVarIn, debugstr_VT(pVarIn),
debugstr_VF(pVarIn), pVarOut);
/* Handle VT_DISPATCH by storing and taking address of returned value */
if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))
{
hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);
if (FAILED(hRet)) goto VarFix_Exit;
pVarIn = &temp;
}
V_VT(pVarOut) = V_VT(pVarIn);
switch (V_VT(pVarIn))
@ -4438,8 +4448,10 @@ HRESULT WINAPI VarFix(LPVARIANT pVarIn, LPVARIANT pVarOut)
else
hRet = DISP_E_TYPEMISMATCH;
}
VarFix_Exit:
if (FAILED(hRet))
V_VT(pVarOut) = VT_EMPTY;
VariantClear(&temp);
return hRet;
}