Module: wine Branch: master Commit: 308a0b2e183e3f61e9b604d58d7c998b33c7c110 URL: http://source.winehq.org/git/wine.git/?a=commit;h=308a0b2e183e3f61e9b604d58d...
Author: Alex Villacís Lasso a_villacis@palosanto.com Date: Tue Jan 2 18:49:59 2007 -0500
oleaut32: Support for VT_DISPATCH in VarAdd.
---
dlls/oleaut32/variant.c | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c index 899cb92..a1102d3 100644 --- a/dlls/oleaut32/variant.c +++ b/dlls/oleaut32/variant.c @@ -3130,6 +3130,7 @@ HRESULT WINAPI VarAdd(LPVARIANT left, LP HRESULT hres; VARTYPE lvt, rvt, resvt, tvt; VARIANT lv, rv, tv; + VARIANT tempLeft, tempRight; double r8res;
/* Variant priority for coercion. Sorted from lowest to highest. @@ -3161,6 +3162,26 @@ HRESULT WINAPI VarAdd(LPVARIANT left, LP VariantInit(&lv); VariantInit(&rv); VariantInit(&tv); + VariantInit(&tempLeft); + VariantInit(&tempRight); + + /* Handle VT_DISPATCH by storing and taking address of returned value */ + if ((V_VT(left) & VT_TYPEMASK) != VT_NULL && (V_VT(right) & VT_TYPEMASK) != VT_NULL) + { + if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH) + { + hres = VARIANT_FetchDispatchValue(left, &tempLeft); + if (FAILED(hres)) goto end; + left = &tempLeft; + } + if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH) + { + hres = VARIANT_FetchDispatchValue(right, &tempRight); + if (FAILED(hres)) goto end; + right = &tempRight; + } + } + lvt = V_VT(left)&VT_TYPEMASK; rvt = V_VT(right)&VT_TYPEMASK;
@@ -3288,6 +3309,8 @@ end: VariantClear(&lv); VariantClear(&rv); VariantClear(&tv); + VariantClear(&tempLeft); + VariantClear(&tempRight); TRACE("returning 0x%8x (variant type %s)\n", hres, debugstr_VT(result)); return hres; }