From f1b44b36e444eec84c46d418e6102d53ead76510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Villac=C3=ADs=20Lasso?= Date: Mon, 4 Jun 2007 13:07:19 -0500 Subject: [PATCH] oleaut32: Support for VT_DISPATCH in VarInt. --- dlls/oleaut32/variant.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index a36a1b5db37..45bc9b6e505 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -4484,10 +4484,20 @@ VarFix_Exit: HRESULT WINAPI VarInt(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 VarInt_Exit; + pVarIn = &temp; + } V_VT(pVarOut) = V_VT(pVarIn); switch (V_VT(pVarIn)) @@ -4511,8 +4521,10 @@ HRESULT WINAPI VarInt(LPVARIANT pVarIn, LPVARIANT pVarOut) hRet = VarDecInt(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut)); break; default: - return VarFix(pVarIn, pVarOut); + hRet = VarFix(pVarIn, pVarOut); } +VarInt_Exit: + VariantClear(&temp); return hRet; }