Alistair Leslie-Hughes : msxml3: Add IDispatchEx support to IXMLDOMDocument2.

Alexandre Julliard julliard at winehq.org
Wed Sep 3 07:44:00 CDT 2008


Module: wine
Branch: master
Commit: 954cb31448b0e4e2b074095f47cc8e6f83ca2f4a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=954cb31448b0e4e2b074095f47cc8e6f83ca2f4a

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Wed Sep  3 10:23:10 2008 +1000

msxml3: Add IDispatchEx support to IXMLDOMDocument2.

---

 dlls/msxml3/dispex.c        |    1 +
 dlls/msxml3/domdoc.c        |   25 +++++++++++++++++++++++++
 dlls/msxml3/msxml_private.h |    1 +
 3 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/dlls/msxml3/dispex.c b/dlls/msxml3/dispex.c
index 438cf48..0ccda74 100644
--- a/dlls/msxml3/dispex.c
+++ b/dlls/msxml3/dispex.c
@@ -79,6 +79,7 @@ static REFIID tid_ids[] = {
     &IID_IXMLDOMAttribute,
     &IID_IXMLDOMCDATASection,
     &IID_IXMLDOMComment,
+    &IID_IXMLDOMDocument,
     &IID_IXMLDOMDocument2,
     &IID_IXMLDOMDocumentFragment,
     &IID_IXMLDOMElement,
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c
index 062ce7a..3c5aede 100644
--- a/dlls/msxml3/domdoc.c
+++ b/dlls/msxml3/domdoc.c
@@ -36,6 +36,7 @@
 #include "shlwapi.h"
 #include "ocidl.h"
 #include "objsafe.h"
+#include "dispex.h"
 
 #include "wine/debug.h"
 
@@ -75,6 +76,9 @@ typedef struct _domdoc
 
     /* IObjectSafety */
     DWORD safeopt;
+
+    /* IDispatchEx */
+    DispatchEx dispex;
 } domdoc;
 
 static xmlDocPtr doparse( char *ptr, int len )
@@ -290,6 +294,10 @@ static HRESULT WINAPI domdoc_QueryInterface( IXMLDOMDocument2 *iface, REFIID rii
     {
         *ppvObject = (IObjectWithSite*)&(This->lpvtblIObjectWithSite);
     }
+    else if(dispex_query_interface(&This->dispex, riid, ppvObject))
+    {
+        return *ppvObject ? S_OK : E_NOINTERFACE;
+    }
     else if(IsEqualGUID(&IID_IRunnableObject, riid))
     {
         TRACE("IID_IRunnableObject not supported returning NULL\n");
@@ -1967,6 +1975,20 @@ static const IObjectSafetyVtbl domdocObjectSafetyVtbl = {
     xmldoc_Safety_SetInterfaceSafetyOptions
 };
 
+
+static const tid_t domdoc_iface_tids[] = {
+    IXMLDOMNode_tid,
+    IXMLDOMDocument_tid,
+    IXMLDOMDocument2_tid,
+    0
+};
+static dispex_static_data_t domdoc_dispex = {
+    NULL,
+    IXMLDOMDocument2_tid,
+    NULL,
+    domdoc_iface_tids
+};
+
 HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument2 **document)
 {
     domdoc *doc;
@@ -2007,6 +2029,9 @@ HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument2 **docu
         HeapFree( GetProcessHeap(), 0, doc );
         return E_FAIL;
     }
+
+    init_dispex(&doc->dispex, (IUnknown*)&doc->lpVtbl, &domdoc_dispex);
+
     /* The ref on doc->node is actually looped back into this object, so release it */
     IXMLDOMNode_Release(doc->node);
 
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index ae3a4e6..55b84df 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -107,6 +107,7 @@ typedef enum tid_t {
     IXMLDOMAttribute_tid,
     IXMLDOMCDATASection_tid,
     IXMLDOMComment_tid,
+    IXMLDOMDocument_tid,
     IXMLDOMDocument2_tid,
     IXMLDOMDocumentFragment_tid,
     IXMLDOMElement_tid,




More information about the wine-cvs mailing list