Michael Stefaniuc : dsound: COM cleanup for the IDirectSoundFullDuplex iface.

Alexandre Julliard julliard at winehq.org
Thu Aug 16 15:26:11 CDT 2012


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Thu Aug 16 01:31:52 2012 +0200

dsound: COM cleanup for the IDirectSoundFullDuplex iface.

---

 dlls/dsound/duplex.c |   59 ++++++++++++++++++++++++-------------------------
 1 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/dlls/dsound/duplex.c b/dlls/dsound/duplex.c
index 49cba9f..2b25ee8 100644
--- a/dlls/dsound/duplex.c
+++ b/dlls/dsound/duplex.c
@@ -42,8 +42,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dsound);
  */
 typedef struct IDirectSoundFullDuplexImpl
 {
-    /* IUnknown fields */
-    const IDirectSoundFullDuplexVtbl *lpVtbl;
+    IDirectSoundFullDuplex IDirectSoundFullDuplex_iface;
     LONG                              ref;
 
     /* IDirectSoundFullDuplexImpl fields */
@@ -159,7 +158,7 @@ static HRESULT WINAPI IDirectSoundFullDuplex_IDirectSound8_QueryInterface(
 {
     IDirectSoundFullDuplex_IDirectSound8 *This = (IDirectSoundFullDuplex_IDirectSound8 *)iface;
     TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
-    return IDirectSoundFullDuplex_QueryInterface((LPDIRECTSOUNDFULLDUPLEX)This->pdsfd, riid, ppobj);
+    return IDirectSoundFullDuplex_QueryInterface(&This->pdsfd->IDirectSoundFullDuplex_iface, riid, ppobj);
 }
 
 static ULONG WINAPI IDirectSoundFullDuplex_IDirectSound8_AddRef(
@@ -334,7 +333,7 @@ static HRESULT WINAPI IDirectSoundFullDuplex_IDirectSoundCapture_QueryInterface(
 {
     IDirectSoundFullDuplex_IDirectSoundCapture *This = (IDirectSoundFullDuplex_IDirectSoundCapture *)iface;
     TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj);
-    return IDirectSoundFullDuplex_QueryInterface((LPDIRECTSOUNDFULLDUPLEX)This->pdsfd, riid, ppobj);
+    return IDirectSoundFullDuplex_QueryInterface(&This->pdsfd->IDirectSoundFullDuplex_iface, riid, ppobj);
 }
 
 static ULONG WINAPI IDirectSoundFullDuplex_IDirectSoundCapture_AddRef(
@@ -439,48 +438,49 @@ static HRESULT IDirectSoundFullDuplex_IDirectSoundCapture_Create(
 }
 
 /***************************************************************************
- * IDirectSoundFullDuplexImpl
+ * IDirectSoundFullDuplex implementation
  */
-static ULONG WINAPI
-IDirectSoundFullDuplexImpl_AddRef( LPDIRECTSOUNDFULLDUPLEX iface )
+static inline IDirectSoundFullDuplexImpl *impl_from_IDirectSoundFullDuplex(IDirectSoundFullDuplex *iface)
 {
-    IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
+    return CONTAINING_RECORD(iface, IDirectSoundFullDuplexImpl, IDirectSoundFullDuplex_iface);
+}
+
+static ULONG WINAPI IDirectSoundFullDuplexImpl_AddRef(IDirectSoundFullDuplex *iface)
+{
+    IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);
     ULONG ref = InterlockedIncrement(&(This->ref));
     TRACE("(%p) ref was %d\n", This, ref - 1);
     return ref;
 }
 
-static HRESULT WINAPI
-IDirectSoundFullDuplexImpl_QueryInterface(
-    LPDIRECTSOUNDFULLDUPLEX iface,
-    REFIID riid,
-    LPVOID* ppobj )
+static HRESULT WINAPI IDirectSoundFullDuplexImpl_QueryInterface(IDirectSoundFullDuplex *iface,
+        REFIID riid, void **ppv)
 {
-    IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
-    TRACE( "(%p,%s,%p)\n", This, debugstr_guid(riid), ppobj );
+    IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);
+    TRACE("(%p,%s,%p)\n", This, debugstr_guid(riid), ppv);
 
-    if (ppobj == NULL) {
+    if (ppv == NULL) {
 	WARN("invalid parameter\n");
 	return E_INVALIDARG;
     }
 
-    *ppobj = NULL;
+    *ppv = NULL;
 
     if (IsEqualIID(riid, &IID_IUnknown)) {
         if (!This->pUnknown) {
             IDirectSoundFullDuplex_IUnknown_Create(iface, &This->pUnknown);
             if (!This->pUnknown) {
                 WARN("IDirectSoundFullDuplex_IUnknown_Create() failed\n");
-                *ppobj = NULL;
+                *ppv = NULL;
                 return E_NOINTERFACE;
             }
         }
         IDirectSoundFullDuplex_IUnknown_AddRef(This->pUnknown);
-        *ppobj = This->pUnknown;
+        *ppv = This->pUnknown;
         return S_OK;
     } else if (IsEqualIID(riid, &IID_IDirectSoundFullDuplex)) {
         IDirectSoundFullDuplexImpl_AddRef(iface);
-        *ppobj = This;
+        *ppv = &This->IDirectSoundFullDuplex_iface;
         return S_OK;
     } else if (IsEqualIID(riid, &IID_IDirectSound)
                || IsEqualIID(riid, &IID_IDirectSound8)) {
@@ -488,34 +488,33 @@ IDirectSoundFullDuplexImpl_QueryInterface(
             IDirectSoundFullDuplex_IDirectSound8_Create(iface, &This->pDS8);
             if (!This->pDS8) {
                 WARN("IDirectSoundFullDuplex_IDirectSound8_Create() failed\n");
-                *ppobj = NULL;
+                *ppv = NULL;
                 return E_NOINTERFACE;
             }
         }
         IDirectSoundFullDuplex_IDirectSound8_AddRef(This->pDS8);
-        *ppobj = This->pDS8;
+        *ppv = This->pDS8;
         return S_OK;
     } else if (IsEqualIID(riid, &IID_IDirectSoundCapture)) {
         if (!This->pDSC) {
             IDirectSoundFullDuplex_IDirectSoundCapture_Create(iface, &This->pDSC);
             if (!This->pDSC) {
                 WARN("IDirectSoundFullDuplex_IDirectSoundCapture_Create() failed\n");
-                *ppobj = NULL;
+                *ppv = NULL;
                 return E_NOINTERFACE;
             }
         }
         IDirectSoundFullDuplex_IDirectSoundCapture_AddRef(This->pDSC);
-        *ppobj = This->pDSC;
+        *ppv = This->pDSC;
         return S_OK;
     }
 
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI
-IDirectSoundFullDuplexImpl_Release( LPDIRECTSOUNDFULLDUPLEX iface )
+static ULONG WINAPI IDirectSoundFullDuplexImpl_Release(IDirectSoundFullDuplex *iface)
 {
-    IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
+    IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);
     ULONG ref = InterlockedDecrement(&(This->ref));
     TRACE("(%p) ref was %d\n", This, ref - 1);
 
@@ -535,8 +534,8 @@ static HRESULT WINAPI IDirectSoundFullDuplexImpl_Initialize(IDirectSoundFullDupl
         const DSBUFFERDESC *bufdesc, HWND hwnd, DWORD level, IDirectSoundCaptureBuffer8 **dscb8,
         IDirectSoundBuffer8 **dsb8)
 {
+    IDirectSoundFullDuplexImpl *This = impl_from_IDirectSoundFullDuplex(iface);
     HRESULT hr;
-    IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
 
     TRACE("(%p,%s,%s,%p,%p,%p,%x,%p,%p)\n", This, debugstr_guid(capture_dev),
             debugstr_guid(render_dev), cbufdesc, bufdesc, hwnd, level, dscb8, dsb8);
@@ -606,7 +605,7 @@ error:
     return hr;
 }
 
-static const IDirectSoundFullDuplexVtbl dsfdvt =
+static const IDirectSoundFullDuplexVtbl dsfd_vtbl =
 {
     /* IUnknown methods */
     IDirectSoundFullDuplexImpl_QueryInterface,
@@ -633,7 +632,7 @@ HRESULT DSOUND_FullDuplexCreate(REFIID riid, void **ppv)
 
     setup_dsound_options();
 
-    obj->lpVtbl = &dsfdvt;
+    obj->IDirectSoundFullDuplex_iface.lpVtbl = &dsfd_vtbl;
     obj->ref = 1;
 
     hr = IUnknown_QueryInterface((IUnknown*)obj, riid, ppv);




More information about the wine-cvs mailing list