Jacek Caban : mshtml: Added support for calling functions returned by builtin getters.

Alexandre Julliard julliard at winehq.org
Fri Jul 13 14:11:19 CDT 2012


Module: wine
Branch: master
Commit: 61ded412a2ced9ee7af7b50ad393ad2c23170e58
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=61ded412a2ced9ee7af7b50ad393ad2c23170e58

Author: Jacek Caban <jacek at 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;




More information about the wine-cvs mailing list