diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index 0cd5eb59588..41e143ad43c 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -545,6 +545,13 @@ static HRESULT WINAPI dinput7_CreateDeviceEx( IDirectInput7W *iface, const GUID else hr = hid_joystick_create_device( impl, guid, &device ); if (FAILED(hr)) return hr; + + if (FAILED(hr = dinput_device_init( device ))) + { + IDirectInputDevice8_Release( device ); + return hr; + } + hr = IDirectInputDevice8_QueryInterface( device, iid, out ); IDirectInputDevice8_Release( device ); return hr; diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c index 3aa6d6b5ad3..ddd67be4fd0 100644 --- a/dlls/dinput/joystick_hid.c +++ b/dlls/dinput/joystick_hid.c @@ -2138,8 +2138,6 @@ HRESULT hid_joystick_create_device( struct dinput *dinput, const GUID *guid, IDi impl->base.caps.dwFFDriverVersion = 1; } - if (FAILED(hr = dinput_device_init( &impl->base.IDirectInputDevice8W_iface ))) goto failed; - *out = &impl->base.IDirectInputDevice8W_iface; return DI_OK; diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c index 1a1776ac408..f8f7a5a3195 100644 --- a/dlls/dinput/keyboard.c +++ b/dlls/dinput/keyboard.c @@ -183,12 +183,6 @@ HRESULT keyboard_create_device( struct dinput *dinput, const GUID *guid, IDirect impl->base.caps.dwFirmwareRevision = 100; impl->base.caps.dwHardwareRevision = 100; - if (FAILED(hr = dinput_device_init( &impl->base.IDirectInputDevice8W_iface ))) - { - IDirectInputDevice_Release( &impl->base.IDirectInputDevice8W_iface ); - return hr; - } - *out = &impl->base.IDirectInputDevice8W_iface; return DI_OK; } diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c index 2a004d80143..622dc1994d1 100644 --- a/dlls/dinput/mouse.c +++ b/dlls/dinput/mouse.c @@ -122,12 +122,6 @@ HRESULT mouse_create_device( struct dinput *dinput, const GUID *guid, IDirectInp if (appkey) RegCloseKey(appkey); if (hkey) RegCloseKey(hkey); - if (FAILED(hr = dinput_device_init( &impl->base.IDirectInputDevice8W_iface ))) - { - IDirectInputDevice_Release( &impl->base.IDirectInputDevice8W_iface ); - return hr; - } - if (dinput->dwVersion >= 0x0800) { impl->base.use_raw_input = TRUE;