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