Michael Stefaniuc : msxml3: COM cleanup for factory.c.

Alexandre Julliard julliard at winehq.org
Thu May 19 13:32:09 CDT 2011


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Wed May 18 23:42:33 2011 +0200

msxml3: COM cleanup for factory.c.

---

 dlls/msxml3/factory.c |   46 ++++++++++++++++++++++++++++------------------
 1 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/dlls/msxml3/factory.c b/dlls/msxml3/factory.c
index ee72fcf..7c39b39 100644
--- a/dlls/msxml3/factory.c
+++ b/dlls/msxml3/factory.c
@@ -54,18 +54,23 @@ typedef HRESULT (*DOMFactoryCreateInstanceFunc)(const GUID *clsid, IUnknown *pUn
  */
 typedef struct
 {
-    const struct IClassFactoryVtbl *lpVtbl;
+    IClassFactory IClassFactory_iface;
     ClassFactoryCreateInstanceFunc pCreateInstance;
 } ClassFactory;
 
 typedef struct
 {
-    const struct IClassFactoryVtbl *lpVtbl;
+    IClassFactory IClassFactory_iface;
     LONG ref;
     DOMFactoryCreateInstanceFunc pCreateInstance;
     GUID clsid;
 } DOMFactory;
 
+static inline ClassFactory *ClassFactory_from_IClassFactory(IClassFactory *iface)
+{
+    return CONTAINING_RECORD(iface, ClassFactory, IClassFactory_iface);
+}
+
 static HRESULT WINAPI ClassFactory_QueryInterface(
     IClassFactory *iface,
     REFIID riid,
@@ -100,7 +105,7 @@ static HRESULT WINAPI ClassFactory_CreateInstance(
     REFIID riid,
     void **ppobj )
 {
-    ClassFactory *This = (ClassFactory*)iface;
+    ClassFactory *This = ClassFactory_from_IClassFactory(iface);
     IUnknown *punk;
     HRESULT r;
 
@@ -128,9 +133,14 @@ static HRESULT WINAPI ClassFactory_LockServer(
     return S_OK;
 }
 
+static inline DOMFactory *DOMFactory_from_IClassFactory(IClassFactory *iface)
+{
+    return CONTAINING_RECORD(iface, DOMFactory, IClassFactory_iface);
+}
+
 static ULONG WINAPI DOMClassFactory_AddRef(IClassFactory *iface )
 {
-    DOMFactory *This = (DOMFactory*)iface;
+    DOMFactory *This = DOMFactory_from_IClassFactory(iface);
     ULONG ref = InterlockedIncrement(&This->ref);
     TRACE("(%p) ref = %u\n", This, ref);
     return ref;
@@ -138,7 +148,7 @@ static ULONG WINAPI DOMClassFactory_AddRef(IClassFactory *iface )
 
 static ULONG WINAPI DOMClassFactory_Release(IClassFactory *iface )
 {
-    DOMFactory *This = (DOMFactory*)iface;
+    DOMFactory *This = DOMFactory_from_IClassFactory(iface);
     ULONG ref = InterlockedDecrement(&This->ref);
     TRACE("(%p) ref = %u\n", This, ref);
     if(!ref) {
@@ -153,7 +163,7 @@ static HRESULT WINAPI DOMClassFactory_CreateInstance(
     REFIID riid,
     void **ppobj )
 {
-    DOMFactory *This = (DOMFactory*)iface;
+    DOMFactory *This = DOMFactory_from_IClassFactory(iface);
     IUnknown *punk;
     HRESULT r;
 
@@ -196,12 +206,12 @@ static HRESULT DOMClassFactory_Create(const GUID *clsid, REFIID riid, void **ppv
     DOMFactory *ret = heap_alloc(sizeof(DOMFactory));
     HRESULT hres;
 
-    ret->lpVtbl = &DOMClassFactoryVtbl;
+    ret->IClassFactory_iface.lpVtbl = &DOMClassFactoryVtbl;
     ret->ref = 0;
     ret->clsid = *clsid;
     ret->pCreateInstance = fnCreateInstance;
 
-    hres = IClassFactory_QueryInterface((IClassFactory*)ret, riid, ppv);
+    hres = IClassFactory_QueryInterface(&ret->IClassFactory_iface, riid, ppv);
     if(FAILED(hres)) {
         heap_free(ret);
         *ppv = NULL;
@@ -209,11 +219,11 @@ static HRESULT DOMClassFactory_Create(const GUID *clsid, REFIID riid, void **ppv
     return hres;
 }
 
-static ClassFactory xmldoccf = { &ClassFactoryVtbl, XMLDocument_create };
-static ClassFactory saxreadcf = { &ClassFactoryVtbl, SAXXMLReader_create };
-static ClassFactory httpreqcf = { &ClassFactoryVtbl, XMLHTTPRequest_create };
-static ClassFactory xsltemplatecf = { &ClassFactoryVtbl, XSLTemplate_create };
-static ClassFactory mxwritercf = { &ClassFactoryVtbl, MXWriter_create };
+static ClassFactory xmldoccf = { { &ClassFactoryVtbl }, XMLDocument_create };
+static ClassFactory saxreadcf = { { &ClassFactoryVtbl }, SAXXMLReader_create };
+static ClassFactory httpreqcf = { { &ClassFactoryVtbl }, XMLHTTPRequest_create };
+static ClassFactory xsltemplatecf = { { &ClassFactoryVtbl }, XSLTemplate_create };
+static ClassFactory mxwritercf = { { &ClassFactoryVtbl }, MXWriter_create };
 
 /******************************************************************
  *		DllGetClassObject (MSXML3.@)
@@ -243,7 +253,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
     }
     else if( IsEqualCLSID( rclsid, &CLSID_XMLDocument ) )
     {
-        cf = (IClassFactory*) &xmldoccf.lpVtbl;
+        cf = &xmldoccf.IClassFactory_iface;
     }
     else if( IsEqualCLSID( rclsid, &CLSID_DOMFreeThreadedDocument )   ||   /* Version indep. v 2.x */
              IsEqualCLSID( rclsid, &CLSID_FreeThreadedDOMDocument )   ||
@@ -259,7 +269,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
              IsEqualCLSID( rclsid, &CLSID_SAXXMLReader40 ) ||
              IsEqualCLSID( rclsid, &CLSID_SAXXMLReader60 ))
     {
-        cf = (IClassFactory*) &saxreadcf.lpVtbl;
+        cf = &saxreadcf.IClassFactory_iface;
     }
     else if( IsEqualCLSID( rclsid, &CLSID_XMLHTTPRequest ) ||
              IsEqualCLSID( rclsid, &CLSID_XMLHTTP26 ) ||
@@ -267,7 +277,7 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
              IsEqualCLSID( rclsid, &CLSID_XMLHTTP40 ) ||
              IsEqualCLSID( rclsid, &CLSID_XMLHTTP60 ))
     {
-        cf = (IClassFactory*) &httpreqcf.lpVtbl;
+        cf = &httpreqcf.IClassFactory_iface;
     }
     else if( IsEqualCLSID( rclsid, &CLSID_XSLTemplate )   ||
              IsEqualCLSID( rclsid, &CLSID_XSLTemplate26 ) ||
@@ -275,14 +285,14 @@ HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv )
              IsEqualCLSID( rclsid, &CLSID_XSLTemplate40 ) ||
              IsEqualCLSID( rclsid, &CLSID_XSLTemplate60 ))
     {
-        cf = (IClassFactory*) &xsltemplatecf.lpVtbl;
+        cf = &xsltemplatecf.IClassFactory_iface;
     }
     else if( IsEqualCLSID( rclsid, &CLSID_MXXMLWriter )   ||
              IsEqualCLSID( rclsid, &CLSID_MXXMLWriter30 ) ||
              IsEqualCLSID( rclsid, &CLSID_MXXMLWriter40 ) ||
              IsEqualCLSID( rclsid, &CLSID_MXXMLWriter60 ) )
     {
-        cf = (IClassFactory*) &mxwritercf.lpVtbl;
+        cf = &mxwritercf.IClassFactory_iface;
     }
 
     if ( !cf )




More information about the wine-cvs mailing list