Hi Alistair,
Alistair Leslie-Hughes wrote:
Hi,
Changelog: msxml3: Add IDispatchEx support to IXMLDOMElement
+ else if( IsEqualGUID( riid, &IID_IDispatch ) || + IsEqualGUID( riid, &IID_IDispatchEx ) ) + { + xmlnode *node = impl_from_IXMLDOMNode( This->node ); + + dispex_query_interface(&node->dispex, riid, ppvObject); + + return *ppvObject ? S_OK : E_NOINTERFACE; + }
This should be handled by node's QueryInterface implementation.
+ + xmlnode = impl_from_IXMLDOMNode( This->node );
It's not about your code as you follow msxml3 design, but this is ugly and it shouldn't be needed.
+ init_dispex(&xmlnode->dispex, (IUnknown*)&This->lpVtbl, &domelem_dispex);
init_dispex is first called in create_basic_node, so you initialize it second time here.
IMO msxml3 object inheritance needs serious design changes and it would be better to do it before adding IDispatchEx support for node implementations. I will send a few first patches.
Thanks, Jacek