Alistair Leslie-Hughes : dpvoice: Add IDirectPlayVoiceTest stub interface.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Sep 26 16:35:49 CDT 2014


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

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Fri Sep 26 09:01:15 2014 +1000

dpvoice: Add IDirectPlayVoiceTest stub interface.

---

 dlls/dpvoice/client.c         | 86 +++++++++++++++++++++++++++++++++++++++++++
 dlls/dpvoice/dvoice_private.h |  1 +
 dlls/dpvoice/main.c           |  1 +
 dlls/dpvoice/tests/voice.c    | 25 ++++++++++++-
 4 files changed, 112 insertions(+), 1 deletion(-)

diff --git a/dlls/dpvoice/client.c b/dlls/dpvoice/client.c
index 68d631c..0fab0c5 100644
--- a/dlls/dpvoice/client.c
+++ b/dlls/dpvoice/client.c
@@ -41,11 +41,22 @@ typedef struct IDirectPlayVoiceClientImpl
     LONG ref;
 } IDirectPlayVoiceClientImpl;
 
+typedef struct IDirectPlayVoiceTestImpl
+{
+    IDirectPlayVoiceTest IDirectPlayVoiceTest_iface;
+    LONG ref;
+} IDirectPlayVoiceTestImpl;
+
 static inline IDirectPlayVoiceClientImpl *impl_from_IDirectPlayVoiceClient(IDirectPlayVoiceClient *iface)
 {
     return CONTAINING_RECORD(iface, IDirectPlayVoiceClientImpl, IDirectPlayVoiceClient_iface);
 }
 
+static inline IDirectPlayVoiceTestImpl *impl_from_IDirectPlayVoiceTest(IDirectPlayVoiceTest *iface)
+{
+    return CONTAINING_RECORD(iface, IDirectPlayVoiceTestImpl, IDirectPlayVoiceTest_iface);
+}
+
 static HRESULT WINAPI dpvclient_QueryInterface(IDirectPlayVoiceClient *iface, REFIID riid, void **ppv)
 {
     if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectPlayVoiceClient))
@@ -232,3 +243,78 @@ HRESULT DPVOICE_CreateDirectPlayVoiceClient(IClassFactory *iface, IUnknown *pUnk
 
     return ret;
 }
+
+static HRESULT WINAPI dpvtest_QueryInterface(IDirectPlayVoiceTest *iface, REFIID riid, void **ppv)
+{
+    if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectPlayVoiceTest))
+    {
+        IUnknown_AddRef(iface);
+        *ppv = iface;
+        return S_OK;
+    }
+
+    WARN("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ppv);
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI dpvtest_AddRef(IDirectPlayVoiceTest *iface)
+{
+    IDirectPlayVoiceTestImpl *This = impl_from_IDirectPlayVoiceTest(iface);
+    ULONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) ref=%u\n", This, ref);
+
+    return ref;
+}
+
+static ULONG WINAPI dpvtest_Release(IDirectPlayVoiceTest *iface)
+{
+    IDirectPlayVoiceTestImpl *This = impl_from_IDirectPlayVoiceTest(iface);
+    ULONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) ref=%u\n", This, ref);
+
+    if (!ref)
+    {
+        HeapFree(GetProcessHeap(), 0, This);
+    }
+    return ref;
+}
+
+static HRESULT WINAPI dpvtest_CheckAudioSetup(IDirectPlayVoiceTest *iface, const GUID *pguidPlaybackDevice, const GUID *pguidCaptureDevice,
+                     HWND hwndParent, DWORD dwFlags)
+{
+    IDirectPlayVoiceTestImpl *This = impl_from_IDirectPlayVoiceTest(iface);
+    FIXME("%p %p %p %p %d\n", This, pguidPlaybackDevice, pguidCaptureDevice, hwndParent, dwFlags);
+    return E_NOTIMPL;
+}
+
+static const IDirectPlayVoiceTestVtbl DirectPlayVoiceTest_Vtbl =
+{
+    dpvtest_QueryInterface,
+    dpvtest_AddRef,
+    dpvtest_Release,
+    dpvtest_CheckAudioSetup
+};
+
+HRESULT DPVOICE_CreateDirectPlayVoiceTest(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj)
+{
+    IDirectPlayVoiceTestImpl* test;
+    HRESULT ret;
+
+    TRACE("(%p, %s, %p)\n", pUnkOuter, debugstr_guid(riid), ppobj);
+
+    *ppobj = NULL;
+
+    test = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectPlayVoiceTestImpl));
+    if (!test)
+        return E_OUTOFMEMORY;
+
+    test->IDirectPlayVoiceTest_iface.lpVtbl = &DirectPlayVoiceTest_Vtbl;
+    test->ref = 1;
+
+    ret = IDirectPlayVoiceTest_QueryInterface(&test->IDirectPlayVoiceTest_iface, riid, ppobj);
+    IDirectPlayVoiceTest_Release(&test->IDirectPlayVoiceTest_iface);
+
+    return ret;
+}
diff --git a/dlls/dpvoice/dvoice_private.h b/dlls/dpvoice/dvoice_private.h
index 0ee2658..5b0e57d 100644
--- a/dlls/dpvoice/dvoice_private.h
+++ b/dlls/dpvoice/dvoice_private.h
@@ -22,5 +22,6 @@
 
 extern HRESULT DPVOICE_CreateDirectPlayVoiceClient(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj) DECLSPEC_HIDDEN;
 extern HRESULT DPVOICE_CreateDirectPlayVoiceServer(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj) DECLSPEC_HIDDEN;
+extern HRESULT DPVOICE_CreateDirectPlayVoiceTest(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppobj) DECLSPEC_HIDDEN;
 
 #endif
diff --git a/dlls/dpvoice/main.c b/dlls/dpvoice/main.c
index 608d1cd..aab0859 100644
--- a/dlls/dpvoice/main.c
+++ b/dlls/dpvoice/main.c
@@ -96,6 +96,7 @@ static IClassFactoryImpl DPVOICE_CFS[] =
 {
     { { &DICF_Vtbl }, 1, &CLSID_DirectPlayVoiceClient,  DPVOICE_CreateDirectPlayVoiceClient },
     { { &DICF_Vtbl }, 1, &CLSID_DirectPlayVoiceServer,  DPVOICE_CreateDirectPlayVoiceServer },
+    { { &DICF_Vtbl }, 1, &CLSID_DirectPlayVoiceTest,    DPVOICE_CreateDirectPlayVoiceTest },
     { { NULL }, 0, NULL, NULL }
 };
 
diff --git a/dlls/dpvoice/tests/voice.c b/dlls/dpvoice/tests/voice.c
index 4d950bd..883c684 100644
--- a/dlls/dpvoice/tests/voice.c
+++ b/dlls/dpvoice/tests/voice.c
@@ -239,7 +239,7 @@ static BOOL test_init_dpvoice_client(void)
 
             /* See if we can get the default values from the registry and try again. */
             hr = CoCreateInstance(&CLSID_DirectPlayVoiceTest, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectPlayVoiceTest, (void **)&voicetest);
-            todo_wine ok(hr == S_OK, "CoCreateInstance failed with 0x%08x\n", hr);
+            ok(hr == S_OK, "CoCreateInstance failed with 0x%08x\n", hr);
             if(hr == S_OK)
             {
                 hr = IDirectPlayVoiceTest_CheckAudioSetup(voicetest, &DSDEVID_DefaultVoicePlayback, &DSDEVID_DefaultVoiceCapture,
@@ -322,6 +322,27 @@ static void test_cleanup_dpvoice(void)
     }
 }
 
+static void create_voicetest(void)
+{
+    HRESULT hr;
+    IDirectPlayVoiceTest *voicetest;
+
+    hr = CoCreateInstance(&CLSID_DirectPlayVoiceTest, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectPlayVoiceTest, (void **)&voicetest);
+    if(hr == S_OK)
+    {
+        hr = IDirectPlayVoiceTest_CheckAudioSetup(voicetest, &DSDEVID_DefaultVoicePlayback, &DSDEVID_DefaultVoiceCapture,
+                                                          NULL, DVFLAGS_QUERYONLY);
+        todo_wine ok(hr == S_OK || hr == DVERR_RUNSETUP, "CheckAudioSetup failed with 0x%08x\n", hr);
+
+        IDirectPlayVoiceTest_Release(voicetest);
+    }
+    else
+    {
+        /* Everything after Windows XP doesnt have dpvoice installed. */
+        win_skip("IDirectPlayVoiceClient not supported on thie platform\n");
+    }
+}
+
 START_TEST(voice)
 {
     HRESULT hr;
@@ -331,6 +352,8 @@ START_TEST(voice)
     if(hr != S_OK)
         return;
 
+    create_voicetest();
+
     if(test_init_dpvoice_server() && test_init_dpvoice_client())
     {
         /* TODO */




More information about the wine-cvs mailing list