Mike McCormack : shdocvw: Move the private class factory declaration into factory.c.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 11 05:05:18 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: c1caf43d10918f7f422b7c5ef4ea5d3c323da8d6
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=c1caf43d10918f7f422b7c5ef4ea5d3c323da8d6

Author: Mike McCormack <mike at codeweavers.com>
Date:   Tue Apr 11 14:48:49 2006 +0900

shdocvw: Move the private class factory declaration into factory.c.

---

 dlls/shdocvw/factory.c      |   19 +++++++++++++++++--
 dlls/shdocvw/shdocvw.h      |   13 +------------
 dlls/shdocvw/shdocvw_main.c |    5 +++--
 3 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/dlls/shdocvw/factory.c b/dlls/shdocvw/factory.c
index 7770b4d..264539a 100644
--- a/dlls/shdocvw/factory.c
+++ b/dlls/shdocvw/factory.c
@@ -30,6 +30,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
  * (Based on implementation in ddraw/main.c)
  */
 
+typedef struct
+{
+    /* IUnknown fields */
+    const IClassFactoryVtbl *lpVtbl;
+    HRESULT (*cf)(LPUNKNOWN, REFIID, LPVOID *);
+    LONG ref;
+} IClassFactoryImpl;
+
+
 /**********************************************************************
  * WBCF_QueryInterface (IUnknown)
  */
@@ -78,7 +87,8 @@ static ULONG WINAPI WBCF_Release(LPCLASS
 static HRESULT WINAPI WBCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
                                           REFIID riid, LPVOID *ppobj)
 {
-    return WebBrowser_Create(pOuter, riid, ppobj);
+    IClassFactoryImpl *This = (IClassFactoryImpl *) iface;
+    return This->cf(pOuter, riid, ppobj);
 }
 
 /************************************************************************
@@ -105,4 +115,9 @@ static const IClassFactoryVtbl WBCF_Vtbl
     WBCF_LockServer
 };
 
-IClassFactoryImpl SHDOCVW_ClassFactory = {&WBCF_Vtbl};
+static IClassFactoryImpl SHDOCVW_WBClassFactory = {&WBCF_Vtbl, WebBrowser_Create};
+
+IClassFactory *get_class_factory(void)
+{
+    return (IClassFactory*) &SHDOCVW_WBClassFactory;
+}
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h
index 1b378ec..b1b436b 100644
--- a/dlls/shdocvw/shdocvw.h
+++ b/dlls/shdocvw/shdocvw.h
@@ -40,18 +40,6 @@
 #include "hlink.h"
 
 /**********************************************************************
- * IClassFactory declaration for SHDOCVW.DLL
- */
-typedef struct
-{
-    /* IUnknown fields */
-    const IClassFactoryVtbl *lpVtbl;
-    LONG ref;
-} IClassFactoryImpl;
-
-extern IClassFactoryImpl SHDOCVW_ClassFactory;
-
-/**********************************************************************
  * Shell Instance Objects
  */
 extern HRESULT SHDOCVW_GetShellInstanceObjectClassObject(REFCLSID rclsid, 
@@ -188,5 +176,6 @@ extern HINSTANCE shdocvw_hinstance;
 extern void register_iewindow_class(void);
 extern void unregister_iewindow_class(void);
 extern BOOL create_ie_window(LPCWSTR url);
+extern IClassFactory *get_class_factory(void);
 
 #endif /* __WINE_SHDOCVW_H */
diff --git a/dlls/shdocvw/shdocvw_main.c b/dlls/shdocvw/shdocvw_main.c
index dd30bb7..f192db7 100644
--- a/dlls/shdocvw/shdocvw_main.c
+++ b/dlls/shdocvw/shdocvw_main.c
@@ -475,8 +475,9 @@ HRESULT WINAPI DllGetClassObject(REFCLSI
         IsEqualIID(&IID_IClassFactory, riid))
     {
         /* Pass back our shdocvw class factory */
-        *ppv = (LPVOID)&SHDOCVW_ClassFactory;
-        IClassFactory_AddRef((IClassFactory*)&SHDOCVW_ClassFactory);
+        IClassFactory *cf = get_class_factory();
+        IClassFactory_AddRef(cf);
+        *ppv = cf;
 
         return S_OK;
     }




More information about the wine-cvs mailing list