Module: wine Branch: master Commit: 61ded412a2ced9ee7af7b50ad393ad2c23170e58 URL: http://source.winehq.org/git/wine.git/?a=commit;h=61ded412a2ced9ee7af7b50ad3...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jul 13 14:46:41 2012 +0200
mshtml: Added support for calling functions returned by builtin getters.
---
dlls/mshtml/dispex.c | 22 ++++++++++++++++++++-- 1 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 39dfa64..bbe6098 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -849,7 +849,7 @@ static HRESULT builtin_propget(DispatchEx *This, func_info_t *func, DISPPARAMS * IUnknown *iface; HRESULT hres;
- if(dp->cArgs) { + if(dp && dp->cArgs) { FIXME("cArgs %d\n", dp->cArgs); return E_NOTIMPL; } @@ -961,7 +961,25 @@ static HRESULT invoke_builtin_prop(DispatchEx *This, DISPID id, LCID lcid, WORD hres = builtin_propget(This, func, dp, res); break; default: - hres = typeinfo_invoke(This, func, flags, dp, res, ei); + if(!func->get_vtbl_off) { + hres = typeinfo_invoke(This, func, flags, dp, res, ei); + }else { + VARIANT v; + + hres = builtin_propget(This, func, NULL, &v); + if(FAILED(hres)) + return hres; + + if(V_VT(&v) != VT_DISPATCH) { + FIXME("Not a function %s\n", debugstr_variant(&v)); + VariantClear(&v); + return E_FAIL; + } + + hres = invoke_disp_value(This, V_DISPATCH(&v), lcid, flags, dp, res, ei, caller); + + IDispatch_Release(V_DISPATCH(&v)); + } }
return hres;