Nikolay Sivov : msxml3: Added IDispatchEx support for IXMLDOMImplementation .
Alexandre Julliard
julliard at winehq.org
Tue Nov 15 13:17:32 CST 2011
Module: wine
Branch: master
Commit: 6d4c1931f994023731fc80e8038aea705ab0c406
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6d4c1931f994023731fc80e8038aea705ab0c406
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Nov 14 10:03:31 2011 +0300
msxml3: Added IDispatchEx support for IXMLDOMImplementation.
---
dlls/msxml3/domimpl.c | 24 ++++++++++++++++++++----
dlls/msxml3/tests/domdoc.c | 10 ++++++++++
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/dlls/msxml3/domimpl.c b/dlls/msxml3/domimpl.c
index 2ecf073..501d596 100644
--- a/dlls/msxml3/domimpl.c
+++ b/dlls/msxml3/domimpl.c
@@ -44,6 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
typedef struct _domimpl
{
+ DispatchEx dispex;
IXMLDOMImplementation IXMLDOMImplementation_iface;
LONG ref;
} domimpl;
@@ -67,6 +68,10 @@ static HRESULT WINAPI dimimpl_QueryInterface(
{
*ppvObject = iface;
}
+ else if (dispex_query_interface(&This->dispex, riid, ppvObject))
+ {
+ return *ppvObject ? S_OK : E_NOINTERFACE;
+ }
else
{
TRACE("Unsupported interface %s\n", debugstr_guid(riid));
@@ -97,6 +102,7 @@ static ULONG WINAPI dimimpl_Release(
TRACE("(%p)->(%d)\n", This, ref);
if ( ref == 0 )
{
+ release_dispex(&This->dispex);
heap_free( This );
}
@@ -122,13 +128,10 @@ static HRESULT WINAPI dimimpl_GetTypeInfo(
ITypeInfo** ppTInfo )
{
domimpl *This = impl_from_IXMLDOMImplementation( iface );
- HRESULT hr;
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
- hr = get_typeinfo(IXMLDOMImplementation_tid, ppTInfo);
-
- return hr;
+ return get_typeinfo(IXMLDOMImplementation_tid, ppTInfo);
}
static HRESULT WINAPI dimimpl_GetIDsOfNames(
@@ -220,6 +223,18 @@ static const struct IXMLDOMImplementationVtbl dimimpl_vtbl =
dimimpl_hasFeature
};
+static const tid_t dimimpl_iface_tids[] = {
+ IXMLDOMImplementation_tid,
+ 0
+};
+
+static dispex_static_data_t dimimpl_dispex = {
+ NULL,
+ IXMLDOMImplementation_tid,
+ NULL,
+ dimimpl_iface_tids
+};
+
IUnknown* create_doc_Implementation(void)
{
domimpl *This;
@@ -230,6 +245,7 @@ IUnknown* create_doc_Implementation(void)
This->IXMLDOMImplementation_iface.lpVtbl = &dimimpl_vtbl;
This->ref = 1;
+ init_dispex(&This->dispex, (IUnknown*)&This->IXMLDOMImplementation_iface, &dimimpl_dispex);
return (IUnknown*)&This->IXMLDOMImplementation_iface;
}
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index a79da43..dfad107 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -10507,6 +10507,7 @@ static const DOMNodeType dispex_types_test[] =
static void test_dispex(void)
{
const DOMNodeType *type = dispex_types_test;
+ IXMLDOMImplementation *impl;
IXMLDOMNodeList *node_list;
IXMLDOMParseError *error;
IXMLDOMNamedNodeMap *map;
@@ -10612,6 +10613,15 @@ static void test_dispex(void)
IXMLDOMNamedNodeMap_Release(map);
IXMLDOMElement_Release(elem);
+ /* IXMLDOMImplementation */
+ hr = IXMLDOMDocument_get_implementation(doc, &impl);
+ EXPECT_HR(hr, S_OK);
+
+ hr = IXMLDOMImplementation_QueryInterface(impl, &IID_IDispatchEx, (void**)&dispex);
+ EXPECT_HR(hr, S_OK);
+ IDispatchEx_Release(dispex);
+ IXMLDOMImplementation_Release(impl);
+
IXMLDOMDocument_Release(doc);
/* IXMLHTTPRequest */
More information about the wine-cvs
mailing list