Module: wine Branch: master Commit: f8ff1bd6fb24c5bb9c6f96c9af5b55af701b1c1c URL: http://source.winehq.org/git/wine.git/?a=commit;h=f8ff1bd6fb24c5bb9c6f96c9af...
Author: Alexandre Julliard julliard@winehq.org Date: Sat Oct 11 13:11:49 2008 +0200
comcat: Simplify the class factory implementation and make it more similar to the other ones in ole32.
---
dlls/comcat/comcat_main.c | 2 +- dlls/comcat/comcat_private.h | 12 +--------- dlls/comcat/factory.c | 47 ++++++++++------------------------------- 3 files changed, 14 insertions(+), 47 deletions(-)
diff --git a/dlls/comcat/comcat_main.c b/dlls/comcat/comcat_main.c index 5af9935..b1f6da7 100644 --- a/dlls/comcat/comcat_main.c +++ b/dlls/comcat/comcat_main.c @@ -38,7 +38,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv) { *ppv = NULL; if (IsEqualGUID(rclsid, &CLSID_StdComponentCategoriesMgr)) { - return IClassFactory_QueryInterface((LPCLASSFACTORY)&COMCAT_ClassFactory, iid, ppv); + return ComCatCF_Create(iid, ppv); } FIXME("\n\tCLSID:\t%s,\n\tIID:\t%s\n",debugstr_guid(rclsid),debugstr_guid(iid)); return CLASS_E_CLASSNOTAVAILABLE; diff --git a/dlls/comcat/comcat_private.h b/dlls/comcat/comcat_private.h index 4002dfd..96a3b09 100644 --- a/dlls/comcat/comcat_private.h +++ b/dlls/comcat/comcat_private.h @@ -39,17 +39,7 @@ */ extern LONG dll_ref;
-/********************************************************************** - * ClassFactory declaration for comcat.dll - */ -typedef struct -{ - /* IUnknown fields */ - const IClassFactoryVtbl *lpVtbl; - LONG ref; -} ClassFactoryImpl; - -extern ClassFactoryImpl COMCAT_ClassFactory; +extern HRESULT ComCatCF_Create(REFIID riid, LPVOID *ppv);
/********************************************************************** * StdComponentCategoriesMgr declaration for comcat.dll diff --git a/dlls/comcat/factory.c b/dlls/comcat/factory.c index 22be165..c70a02b 100644 --- a/dlls/comcat/factory.c +++ b/dlls/comcat/factory.c @@ -24,7 +24,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
-static ULONG WINAPI COMCAT_IClassFactory_AddRef(LPCLASSFACTORY iface);
/********************************************************************** * COMCAT_IClassFactory_QueryInterface (also IUnknown) @@ -42,7 +41,7 @@ static HRESULT WINAPI COMCAT_IClassFactory_QueryInterface( IsEqualGUID(riid, &IID_IClassFactory)) { *ppvObj = (LPVOID)iface; - COMCAT_IClassFactory_AddRef(iface); + IUnknown_AddRef(iface); return S_OK; }
@@ -54,16 +53,7 @@ static HRESULT WINAPI COMCAT_IClassFactory_QueryInterface( */ static ULONG WINAPI COMCAT_IClassFactory_AddRef(LPCLASSFACTORY iface) { - ClassFactoryImpl *This = (ClassFactoryImpl *)iface; - ULONG ref; - - TRACE("\n"); - - ref = InterlockedIncrement(&This->ref); - if (ref == 1) { - InterlockedIncrement(&dll_ref); - } - return ref; + return 2; /* non-heap based object */ }
/********************************************************************** @@ -71,16 +61,7 @@ static ULONG WINAPI COMCAT_IClassFactory_AddRef(LPCLASSFACTORY iface) */ static ULONG WINAPI COMCAT_IClassFactory_Release(LPCLASSFACTORY iface) { - ClassFactoryImpl *This = (ClassFactoryImpl *)iface; - ULONG ref; - - TRACE("\n"); - - ref = InterlockedDecrement(&This->ref); - if (ref == 0) { - InterlockedDecrement(&dll_ref); - } - return ref; + return 1; /* non-heap based object */ }
/********************************************************************** @@ -115,20 +96,14 @@ static HRESULT WINAPI COMCAT_IClassFactory_LockServer( LPCLASSFACTORY iface, BOOL fLock) { - TRACE("\n"); - - if (fLock != FALSE) { - IClassFactory_AddRef(iface); - } else { - IClassFactory_Release(iface); - } + FIXME("(%d), stub!\n",fLock); return S_OK; }
/********************************************************************** - * IClassFactory_Vtbl + * static ClassFactory instance */ -static const IClassFactoryVtbl IClassFactory_Vtbl = +static const IClassFactoryVtbl ComCatCFVtbl = { COMCAT_IClassFactory_QueryInterface, COMCAT_IClassFactory_AddRef, @@ -137,7 +112,9 @@ static const IClassFactoryVtbl IClassFactory_Vtbl = COMCAT_IClassFactory_LockServer };
-/********************************************************************** - * static ClassFactory instance - */ -ClassFactoryImpl COMCAT_ClassFactory = { &IClassFactory_Vtbl, 0 }; +static const IClassFactoryVtbl *ComCatCF = &ComCatCFVtbl; + +HRESULT ComCatCF_Create(REFIID riid, LPVOID *ppv) +{ + return IClassFactory_QueryInterface((IClassFactory *)&ComCatCF, riid, ppv); +}