From: Andrew Eikum Subject: [PATCH] xaudio2_8: Add DLL and implement XAudio2Create Message-Id: <20150730155854.GH26771@foghorn.codeweavers.com> Date: Thu, 30 Jul 2015 10:58:54 -0500 --- configure.ac | 1 + dlls/xaudio2_8/Makefile.in | 5 +++ dlls/xaudio2_8/xaudio2_8.spec | 1 + dlls/xaudio2_8/xaudio_dll.c | 73 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 dlls/xaudio2_8/Makefile.in create mode 100644 dlls/xaudio2_8/xaudio2_8.spec create mode 100644 dlls/xaudio2_8/xaudio_dll.c diff --git a/configure.ac b/configure.ac index 45b8fdb..7d271e5 100644 --- a/configure.ac +++ b/configure.ac @@ -3424,6 +3424,7 @@ WINE_CONFIG_DLL(xapofx1_3) WINE_CONFIG_DLL(xapofx1_4) WINE_CONFIG_DLL(xapofx1_5) WINE_CONFIG_DLL(xaudio2_7,,[clean]) +WINE_CONFIG_DLL(xaudio2_8,,[clean]) WINE_CONFIG_DLL(xinput1_1) WINE_CONFIG_DLL(xinput1_2) WINE_CONFIG_DLL(xinput1_3,,[implib],[xinput]) diff --git a/dlls/xaudio2_8/Makefile.in b/dlls/xaudio2_8/Makefile.in new file mode 100644 index 0000000..d5fb624 --- /dev/null +++ b/dlls/xaudio2_8/Makefile.in @@ -0,0 +1,5 @@ +MODULE = xaudio2_8.dll +IMPORTS = ole32 + +C_SRCS = \ + xaudio_dll.c diff --git a/dlls/xaudio2_8/xaudio2_8.spec b/dlls/xaudio2_8/xaudio2_8.spec new file mode 100644 index 0000000..dd4fee1 --- /dev/null +++ b/dlls/xaudio2_8/xaudio2_8.spec @@ -0,0 +1 @@ +@ stdcall XAudio2Create(ptr long long) diff --git a/dlls/xaudio2_8/xaudio_dll.c b/dlls/xaudio2_8/xaudio_dll.c new file mode 100644 index 0000000..e5dfb9d --- /dev/null +++ b/dlls/xaudio2_8/xaudio_dll.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2015 Andrew Eikum for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" + +#include "initguid.h" +#include "xaudio2.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls( hinstDLL ); + break; + } + return TRUE; +} + +HRESULT WINAPI XAudio2Create(IXAudio2 **ppxa2, UINT32 flags, XAUDIO2_PROCESSOR proc) +{ + HRESULT hr; + IXAudio2 *xa2; + IXAudio27 *xa27; + + /* create XAudio2 2.8 instance */ + hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, + &IID_IXAudio2, (void**)&xa2); + if(FAILED(hr)) + return hr; + + hr = IXAudio2_QueryInterface(xa2, &IID_IXAudio27, (void**)&xa27); + if(FAILED(hr)){ + IXAudio2_Release(xa2); + return hr; + } + + hr = IXAudio27_Initialize(xa27, flags, proc); + if(FAILED(hr)){ + IXAudio27_Release(xa27); + IXAudio2_Release(xa2); + return hr; + } + + IXAudio27_Release(xa27); + + *ppxa2 = xa2; + + return S_OK; +} -- 2.5.0