[PATCH] Correct IDispatchEx Invoke to return the correct object
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Wed Sep 17 05:14:24 CDT 2008
---
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..e8859d1 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) = 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;
+ }
}
- V_VT(res) = VT_DISPATCH;
- V_DISPATCH(res) = (IDispatch*)create_node(This->result->nodesetval->nodeTab[This->resultPos]);
return S_OK;
}
--
1.5.4.1
--------------020306010702030902070903--
More information about the wine-patches
mailing list