oleaut32: Support for VT_DISPATCH in VarNot.
This commit is contained in:
parent
932fcac150
commit
2ebe12397f
|
@ -4891,10 +4891,21 @@ HRESULT WINAPI VarNot(LPVARIANT pVarIn, LPVARIANT pVarOut)
|
||||||
{
|
{
|
||||||
VARIANT varIn;
|
VARIANT varIn;
|
||||||
HRESULT hRet = S_OK;
|
HRESULT hRet = S_OK;
|
||||||
|
VARIANT temp;
|
||||||
|
|
||||||
|
VariantInit(&temp);
|
||||||
|
|
||||||
TRACE("(%p->(%s%s),%p)\n", pVarIn, debugstr_VT(pVarIn),
|
TRACE("(%p->(%s%s),%p)\n", pVarIn, debugstr_VT(pVarIn),
|
||||||
debugstr_VF(pVarIn), pVarOut);
|
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 VarNot_Exit;
|
||||||
|
pVarIn = &temp;
|
||||||
|
}
|
||||||
|
|
||||||
V_VT(pVarOut) = V_VT(pVarIn);
|
V_VT(pVarOut) = V_VT(pVarIn);
|
||||||
|
|
||||||
switch (V_VT(pVarIn))
|
switch (V_VT(pVarIn))
|
||||||
|
@ -4966,8 +4977,10 @@ HRESULT WINAPI VarNot(LPVARIANT pVarIn, LPVARIANT pVarOut)
|
||||||
else
|
else
|
||||||
hRet = DISP_E_TYPEMISMATCH;
|
hRet = DISP_E_TYPEMISMATCH;
|
||||||
}
|
}
|
||||||
|
VarNot_Exit:
|
||||||
if (FAILED(hRet))
|
if (FAILED(hRet))
|
||||||
V_VT(pVarOut) = VT_EMPTY;
|
V_VT(pVarOut) = VT_EMPTY;
|
||||||
|
VariantClear(&temp);
|
||||||
|
|
||||||
return hRet;
|
return hRet;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue