Michael Stefaniuc : dxdiagn: COM cleanup for the IClassFactory iface.

Alexandre Julliard julliard at winehq.org
Mon Aug 1 13:22:09 CDT 2011


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Mon Aug  1 10:39:18 2011 +0200

dxdiagn: COM cleanup for the IClassFactory iface.

---

 dlls/dxdiagn/dxdiag_main.c |   50 +++++++++++++++++++++----------------------
 1 files changed, 24 insertions(+), 26 deletions(-)

diff --git a/dlls/dxdiagn/dxdiag_main.c b/dlls/dxdiagn/dxdiag_main.c
index 2d8b0ea..9cfe2ab 100644
--- a/dlls/dxdiagn/dxdiag_main.c
+++ b/dlls/dxdiagn/dxdiag_main.c
@@ -19,6 +19,8 @@
  *
  */
 
+#define COBJMACROS
+
 #include "config.h"
 #include <stdarg.h>
 
@@ -53,39 +55,42 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
  * DXDiag ClassFactory
  */
 typedef struct {
-  const IClassFactoryVtbl *lpVtbl;
-  REFCLSID   rclsid;
-  HRESULT   (*pfnCreateInstanceFactory)(LPCLASSFACTORY iface, LPUNKNOWN punkOuter, REFIID riid, LPVOID *ppobj);
+  IClassFactory IClassFactory_iface;
 } IClassFactoryImpl;
 
-static HRESULT WINAPI DXDiagCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
+static HRESULT WINAPI DXDiagCF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
+{
   FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
 
-  if (ppobj == NULL) return E_POINTER;
+  if (ppv == NULL) return E_POINTER;
   
   return E_NOINTERFACE;
 }
 
-static ULONG WINAPI DXDiagCF_AddRef(LPCLASSFACTORY iface) {
+static ULONG WINAPI DXDiagCF_AddRef(IClassFactory *iface)
+{
   DXDIAGN_LockModule();
 
   return 2; /* non-heap based object */
 }
 
-static ULONG WINAPI DXDiagCF_Release(LPCLASSFACTORY iface) {
+static ULONG WINAPI DXDiagCF_Release(IClassFactory * iface)
+{
   DXDIAGN_UnlockModule();
 
   return 1; /* non-heap based object */
 }
 
-static HRESULT WINAPI DXDiagCF_CreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj) {
-  IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
-  TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
-  
-  return This->pfnCreateInstanceFactory(iface, pOuter, riid, ppobj);
+static HRESULT WINAPI DXDiagCF_CreateInstance(IClassFactory *iface, IUnknown *pOuter, REFIID riid,
+        void **ppv)
+{
+  TRACE("(%p)->(%p,%s,%p)\n", iface, pOuter, debugstr_guid(riid), ppv);
+
+  return DXDiag_CreateDXDiagProvider(iface, pOuter, riid, ppv);
 }
 
-static HRESULT WINAPI DXDiagCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
+static HRESULT WINAPI DXDiagCF_LockServer(IClassFactory *iface, BOOL dolock)
+{
   TRACE("(%d)\n", dolock);
 
   if (dolock)
@@ -104,10 +109,7 @@ static const IClassFactoryVtbl DXDiagCF_Vtbl = {
   DXDiagCF_LockServer
 };
 
-static IClassFactoryImpl DXDiag_CFS[] = {
-  { &DXDiagCF_Vtbl, &CLSID_DxDiagProvider, DXDiag_CreateDXDiagProvider },
-  { NULL, NULL, NULL }
-};
+static IClassFactoryImpl DXDiag_CF = { { &DXDiagCF_Vtbl } };
 
 /***********************************************************************
  *             DllCanUnloadNow (DXDIAGN.@)
@@ -122,16 +124,12 @@ HRESULT WINAPI DllCanUnloadNow(void)
  */
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 {
-    int i = 0;
-
     TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
-    while (NULL != DXDiag_CFS[i].rclsid) {
-      if (IsEqualGUID(rclsid, DXDiag_CFS[i].rclsid)) {
-	      DXDiagCF_AddRef((IClassFactory*) &DXDiag_CFS[i]);
-	      *ppv = &DXDiag_CFS[i];
-	      return S_OK;
-      }
-      ++i;
+
+    if (IsEqualGUID(rclsid, &CLSID_DxDiagProvider)) {
+      IClassFactory_AddRef(&DXDiag_CF.IClassFactory_iface);
+      *ppv = &DXDiag_CF.IClassFactory_iface;
+      return S_OK;
     }
 
     FIXME("(%s,%s,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);




More information about the wine-cvs mailing list