Alistair Leslie-Hughes : msxml3: Add ISupportErrorInfo interface to IXMLDOMDocument.
Alexandre Julliard
julliard at winehq.org
Sat Dec 20 06:35:37 CST 2008
Module: wine
Branch: master
Commit: 40fdc88efc9eff0a4d12cec2ade4a2b0de457808
URL: http://source.winehq.org/git/wine.git/?a=commit;h=40fdc88efc9eff0a4d12cec2ade4a2b0de457808
Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Fri Dec 19 19:48:58 2008 +1100
msxml3: Add ISupportErrorInfo interface to IXMLDOMDocument.
---
dlls/msxml3/domdoc.c | 50 ++++++++++++++++++++++++++++++++++++++++++++
dlls/msxml3/tests/domdoc.c | 10 ++++++++
2 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index f71b134..a24f16f 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -57,6 +57,7 @@ typedef struct _domdoc
const struct IPersistStreamVtbl *lpvtblIPersistStream;
const struct IObjectWithSiteVtbl *lpvtblIObjectWithSite;
const struct IObjectSafetyVtbl *lpvtblIObjectSafety;
+ const struct ISupportErrorInfoVtbl *lpvtblISupportErrorInfo;
LONG ref;
VARIANT_BOOL async;
VARIANT_BOOL validating;
@@ -248,6 +249,10 @@ static inline domdoc *impl_from_IObjectSafety(IObjectSafety *iface)
return (domdoc *)((char*)iface - FIELD_OFFSET(domdoc, lpvtblIObjectSafety));
}
+static inline domdoc *impl_from_ISupportErrorInfo(ISupportErrorInfo *iface)
+{
+ return (domdoc *)((char*)iface - FIELD_OFFSET(domdoc, lpvtblISupportErrorInfo));
+}
/************************************************************************
* xmldoc implementation of IPersistStream.
@@ -375,6 +380,46 @@ static const IPersistStreamVtbl xmldoc_IPersistStream_VTable =
xmldoc_IPersistStream_GetSizeMax,
};
+/* ISupportErrorInfo interface */
+static HRESULT WINAPI support_error_QueryInterface(
+ ISupportErrorInfo *iface,
+ REFIID riid, void** ppvObj )
+{
+ domdoc *This = impl_from_ISupportErrorInfo(iface);
+ return IXMLDocument_QueryInterface((IXMLDocument *)This, riid, ppvObj);
+}
+
+static ULONG WINAPI support_error_AddRef(
+ ISupportErrorInfo *iface )
+{
+ domdoc *This = impl_from_ISupportErrorInfo(iface);
+ return IXMLDocument_AddRef((IXMLDocument *)This);
+}
+
+static ULONG WINAPI support_error_Release(
+ ISupportErrorInfo *iface )
+{
+ domdoc *This = impl_from_ISupportErrorInfo(iface);
+ return IXMLDocument_Release((IXMLDocument *)This);
+}
+
+static HRESULT WINAPI support_error_InterfaceSupportsErrorInfo(
+ ISupportErrorInfo *iface,
+ REFIID riid )
+{
+ FIXME("(%p)->(%s)\n", iface, debugstr_guid(riid));
+ return S_FALSE;
+}
+
+static const struct ISupportErrorInfoVtbl support_error_vtbl =
+{
+ support_error_QueryInterface,
+ support_error_AddRef,
+ support_error_Release,
+ support_error_InterfaceSupportsErrorInfo
+};
+
+/* IXMLDOMDocument2 interface */
static HRESULT WINAPI domdoc_QueryInterface( IXMLDOMDocument2 *iface, REFIID riid, void** ppvObject )
{
domdoc *This = impl_from_IXMLDOMDocument2( iface );
@@ -402,6 +447,10 @@ static HRESULT WINAPI domdoc_QueryInterface( IXMLDOMDocument2 *iface, REFIID rii
{
*ppvObject = (IObjectWithSite*)&(This->lpvtblIObjectWithSite);
}
+ else if( IsEqualGUID( riid, &IID_ISupportErrorInfo ))
+ {
+ *ppvObject = &This->lpvtblISupportErrorInfo;
+ }
else if(dispex_query_interface(&This->dispex, riid, ppvObject))
{
return *ppvObject ? S_OK : E_NOINTERFACE;
@@ -2138,6 +2187,7 @@ HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument2 **docu
doc->lpvtblIPersistStream = &xmldoc_IPersistStream_VTable;
doc->lpvtblIObjectWithSite = &domdocObjectSite;
doc->lpvtblIObjectSafety = &domdocObjectSafetyVtbl;
+ doc->lpvtblISupportErrorInfo = &support_error_vtbl;
doc->ref = 1;
doc->async = 0;
doc->validating = 0;
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 73ba932..0c8c147 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -400,6 +400,7 @@ static void test_domdoc( void )
IXMLDOMAttribute *node_attr = NULL;
IXMLDOMNode *nodeChild = NULL;
IXMLDOMProcessingInstruction *nodePI = NULL;
+ ISupportErrorInfo *support_error = NULL;
VARIANT_BOOL b;
VARIANT var;
BSTR str;
@@ -862,6 +863,15 @@ static void test_domdoc( void )
IXMLDOMProcessingInstruction_Release(nodePI);
}
+ r = IXMLDOMDocument_QueryInterface( doc, &IID_ISupportErrorInfo, (LPVOID*)&support_error );
+ ok( r == S_OK, "ret %08x\n", r );
+ if(r == S_OK)
+ {
+ r = ISupportErrorInfo_InterfaceSupportsErrorInfo( support_error, &IID_IXMLDOMDocument );
+ todo_wine ok( r == S_OK, "ret %08x\n", r );
+ ISupportErrorInfo_Release( support_error );
+ }
+
r = IXMLDOMDocument_Release( doc );
ok( r == 0, "document ref count incorrect\n");
More information about the wine-cvs
mailing list