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