Nikolay Sivov : msxml3: Support IDispatchEx for IXMLDOMParseError.
Alexandre Julliard
julliard at winehq.org
Wed Nov 2 14:23:35 CDT 2011
Module: wine
Branch: master
Commit: 7a62e46fa153aac9ad544e30fd29d3ed29a9aae9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7a62e46fa153aac9ad544e30fd29d3ed29a9aae9
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue Nov 1 23:50:56 2011 +0300
msxml3: Support IDispatchEx for IXMLDOMParseError.
---
dlls/msxml3/parseerror.c | 20 ++++++++++++++++++++
dlls/msxml3/tests/domdoc.c | 9 +++++++++
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/dlls/msxml3/parseerror.c b/dlls/msxml3/parseerror.c
index 8e67816..b8cc381 100644
--- a/dlls/msxml3/parseerror.c
+++ b/dlls/msxml3/parseerror.c
@@ -44,6 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
typedef struct
{
+ DispatchEx dispex;
IXMLDOMParseError IXMLDOMParseError_iface;
LONG ref;
LONG code, line, linepos, filepos;
@@ -70,6 +71,10 @@ static HRESULT WINAPI parseError_QueryInterface(
{
*ppvObject = iface;
}
+ else if (dispex_query_interface(&This->dispex, riid, ppvObject))
+ {
+ return *ppvObject ? S_OK : E_NOINTERFACE;
+ }
else
{
FIXME("interface %s not implemented\n", debugstr_guid(riid));
@@ -103,6 +108,7 @@ static ULONG WINAPI parseError_Release(
SysFreeString(This->url);
SysFreeString(This->reason);
SysFreeString(This->srcText);
+ release_dispex(&This->dispex);
heap_free( This );
}
@@ -289,6 +295,18 @@ static const struct IXMLDOMParseErrorVtbl parseError_vtbl =
parseError_get_filepos
};
+static const tid_t parseError_iface_tids[] = {
+ IXMLDOMParseError_tid,
+ 0
+};
+
+static dispex_static_data_t parseError_dispex = {
+ NULL,
+ IXMLDOMParseError_tid,
+ NULL,
+ parseError_iface_tids
+};
+
IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR srcText,
LONG line, LONG linepos, LONG filepos )
{
@@ -309,5 +327,7 @@ IXMLDOMParseError *create_parseError( LONG code, BSTR url, BSTR reason, BSTR src
This->linepos = linepos;
This->filepos = filepos;
+ init_dispex(&This->dispex, (IUnknown*)&This->IXMLDOMParseError_iface, &parseError_dispex);
+
return &This->IXMLDOMParseError_iface;
}
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 41fb835..e1be912 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -10627,6 +10627,7 @@ static void test_dispex(void)
{
const DOMNodeType *type = dispex_types_test;
IXMLDOMNodeList *node_list;
+ IXMLDOMParseError *error;
IXMLDOMDocument *doc;
IUnknown *unk;
HRESULT hr;
@@ -10663,6 +10664,14 @@ static void test_dispex(void)
IUnknown_Release(unk);
IXMLDOMNodeList_Release(node_list);
+ /* IXMLDOMParseError */
+ hr = IXMLDOMDocument_get_parseError(doc, &error);
+ EXPECT_HR(hr, S_OK);
+ IXMLDOMParseError_QueryInterface(error, &IID_IUnknown, (void**)&unk);
+ test_domobj_dispex(unk);
+ IUnknown_Release(unk);
+ IXMLDOMParseError_Release(error);
+
IXMLDOMDocument_Release(doc);
free_bstrs();
}
More information about the wine-cvs
mailing list