winmm: Instanciate DirectInput8 class lazily using delay imported DLL.
Instead of statically importing dinput8 and creating the class at load time, which causes some native hooks to fail loading. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52222 Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Andrew Eikum <aeikum@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c521ec04c9
commit
e9282254c6
|
@ -1,7 +1,8 @@
|
|||
EXTRADEFS = -D_WINMM_
|
||||
MODULE = winmm.dll
|
||||
IMPORTLIB = winmm
|
||||
IMPORTS = uuid user32 advapi32 ole32 msacm32 dinput8
|
||||
IMPORTS = uuid user32 advapi32 ole32 msacm32
|
||||
DELAYIMPORTS = dinput8
|
||||
|
||||
C_SRCS = \
|
||||
driver.c \
|
||||
|
|
|
@ -152,11 +152,12 @@ static BOOL CALLBACK enum_instances( const DIDEVICEINSTANCEW *instance, void *co
|
|||
return DIENUM_CONTINUE;
|
||||
}
|
||||
|
||||
void joystick_load( HINSTANCE instance )
|
||||
static BOOL WINAPI joystick_load_once( INIT_ONCE *once, void *param, void **context )
|
||||
{
|
||||
HRESULT hr = DirectInput8Create( instance, DIRECTINPUT_VERSION, &IID_IDirectInput8W,
|
||||
HRESULT hr = DirectInput8Create( hWinMM32Instance, DIRECTINPUT_VERSION, &IID_IDirectInput8W,
|
||||
(void **)&dinput, NULL );
|
||||
if (FAILED(hr)) WARN( "could not create dinput instance, hr %#x\n", hr );
|
||||
if (FAILED(hr)) ERR( "Could not create dinput instance, hr %#x\n", hr );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void joystick_unload()
|
||||
|
@ -177,11 +178,15 @@ void joystick_unload()
|
|||
|
||||
static void find_joysticks(void)
|
||||
{
|
||||
static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
|
||||
|
||||
IDirectInputDevice8W *device;
|
||||
HANDLE event;
|
||||
DWORD index;
|
||||
HRESULT hr;
|
||||
|
||||
InitOnceExecuteOnce( &init_once, joystick_load_once, NULL, NULL );
|
||||
|
||||
if (!dinput) return;
|
||||
|
||||
index = 0;
|
||||
|
|
|
@ -153,7 +153,6 @@ MMRESULT WINMM_CheckCallback(DWORD_PTR dwCallback, DWORD fdwOpen, BOOL mixer) DE
|
|||
|
||||
void WINMM_DeleteWaveform(void) DECLSPEC_HIDDEN;
|
||||
|
||||
void joystick_load( HMODULE instance ) DECLSPEC_HIDDEN;
|
||||
void joystick_unload( void ) DECLSPEC_HIDDEN;
|
||||
|
||||
/* Global variables */
|
||||
|
|
|
@ -144,8 +144,6 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad)
|
|||
|
||||
if (!WINMM_CreateIData(hInstDLL))
|
||||
return FALSE;
|
||||
|
||||
joystick_load( hInstDLL );
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
if(fImpLoad)
|
||||
|
|
Loading…
Reference in New Issue