Alistair Leslie-Hughes : msxml3: Correct IDispatchEx Invoke to return the correct object.

Alexandre Julliard julliard at winehq.org
Thu Sep 18 07:56:09 CDT 2008


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

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Wed Sep 17 20:14:24 2008 +1000

msxml3: Correct IDispatchEx Invoke to return the correct object.

---

 dlls/msxml3/queryresult.c |   27 ++++++++++++++++++++++-----
 1 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/dlls/msxml3/queryresult.c b/dlls/msxml3/queryresult.c
index f30172d..56c1a53 100644
--- a/dlls/msxml3/queryresult.c
+++ b/dlls/msxml3/queryresult.c
@@ -65,6 +65,8 @@ static inline queryresult *impl_from_IXMLDOMNodeList( IXMLDOMNodeList *iface )
     return (queryresult *)((char*)iface - FIELD_OFFSET(queryresult, lpVtbl));
 }
 
+#define XMLQUERYRES(x)  ((IXMLDOMNodeList*)&(x)->lpVtbl)
+
 static HRESULT WINAPI queryresult_QueryInterface(
     IXMLDOMNodeList *iface,
     REFIID riid,
@@ -326,13 +328,28 @@ static HRESULT queryresult_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD fl
 {
     queryresult *This = impl_from_IXMLDOMNodeList( (IXMLDOMNodeList*)iface );
 
-    if(flags != DISPATCH_PROPERTYGET) {
-        FIXME("flags %x\n", flags);
-        return E_NOTIMPL;
-    }
+    TRACE("(%p)->(%x %x %x %p %p %p)\n", This, id, lcid, flags, params, res, ei);
 
     V_VT(res) = VT_DISPATCH;
-    V_DISPATCH(res) = (IDispatch*)create_node(This->result->nodesetval->nodeTab[This->resultPos]);
+    V_DISPATCH(res) = NULL;
+
+    switch(flags)
+    {
+        case INVOKE_PROPERTYGET:
+        {
+            IXMLDOMNode *disp = NULL;
+
+            queryresult_get_item(XMLQUERYRES(This), id - MSXML_DISPID_CUSTOM_MIN, &disp);
+            V_DISPATCH(res) = (IDispatch*)&disp;
+            break;
+        }
+        default:
+        {
+            FIXME("unimplemented flags %x\n", flags);
+            break;
+        }
+    }
+
     return S_OK;
 }
 




More information about the wine-cvs mailing list