Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/dinput/dinput_main.c | 135 ++++++++++++++++++------------------- dlls/dinput/tests/dinput.c | 30 ++++++++- 2 files changed, 95 insertions(+), 70 deletions(-)
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index 7f59c16c45a..3b0de2fbde0 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -553,24 +553,24 @@ static HRESULT WINAPI IDirectInputWImpl_EnumDevices( return S_OK; }
-static ULONG WINAPI IDirectInputAImpl_AddRef(LPDIRECTINPUT7A iface) +static ULONG WINAPI IDirectInputWImpl_AddRef( IDirectInput7W *iface ) { - IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); ULONG ref = InterlockedIncrement(&This->ref);
TRACE( "(%p) ref %d\n", This, ref ); return ref; }
-static ULONG WINAPI IDirectInputWImpl_AddRef(LPDIRECTINPUT7W iface) +static ULONG WINAPI IDirectInputAImpl_AddRef( IDirectInput7A *iface ) { - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); - return IDirectInputAImpl_AddRef( &This->IDirectInput7A_iface ); + IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + return IDirectInput_AddRef( &This->IDirectInput7W_iface ); }
-static ULONG WINAPI IDirectInputAImpl_Release(LPDIRECTINPUT7A iface) +static ULONG WINAPI IDirectInputWImpl_Release( IDirectInput7W *iface ) { - IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); ULONG ref = InterlockedDecrement( &This->ref );
TRACE( "(%p) ref %d\n", This, ref ); @@ -584,15 +584,15 @@ static ULONG WINAPI IDirectInputAImpl_Release(LPDIRECTINPUT7A iface) return ref; }
-static ULONG WINAPI IDirectInputWImpl_Release(LPDIRECTINPUT7W iface) +static ULONG WINAPI IDirectInputAImpl_Release( IDirectInput7A *iface ) { - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); - return IDirectInputAImpl_Release( &This->IDirectInput7A_iface ); + IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + return IDirectInput_Release( &This->IDirectInput7W_iface ); }
-static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, REFIID riid, LPVOID *ppobj) +static HRESULT WINAPI IDirectInputWImpl_QueryInterface( IDirectInput7W *iface, REFIID riid, LPVOID *ppobj ) { - IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
TRACE( "(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppobj );
@@ -602,22 +602,22 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE *ppobj = NULL;
#if DIRECTINPUT_VERSION == 0x0700 - if (IsEqualGUID( &IID_IUnknown, riid ) || - IsEqualGUID( &IID_IDirectInputA, riid ) || - IsEqualGUID( &IID_IDirectInput2A, riid ) || - IsEqualGUID( &IID_IDirectInput7A, riid )) + if (IsEqualGUID( &IID_IDirectInputA, riid ) || + IsEqualGUID( &IID_IDirectInput2A, riid ) || + IsEqualGUID( &IID_IDirectInput7A, riid )) *ppobj = &This->IDirectInput7A_iface; - else if (IsEqualGUID( &IID_IDirectInputW, riid ) || + else if (IsEqualGUID( &IID_IUnknown, riid ) || + IsEqualGUID( &IID_IDirectInputW, riid ) || IsEqualGUID( &IID_IDirectInput2W, riid ) || IsEqualGUID( &IID_IDirectInput7W, riid )) *ppobj = &This->IDirectInput7W_iface;
#else - if (IsEqualGUID( &IID_IUnknown, riid ) || - IsEqualGUID( &IID_IDirectInput8A, riid )) + if (IsEqualGUID( &IID_IDirectInput8A, riid )) *ppobj = &This->IDirectInput8A_iface;
- else if (IsEqualGUID( &IID_IDirectInput8W, riid )) + else if (IsEqualGUID( &IID_IUnknown, riid ) || + IsEqualGUID( &IID_IDirectInput8W, riid )) *ppobj = &This->IDirectInput8W_iface;
#endif @@ -635,10 +635,10 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE return E_NOINTERFACE; }
-static HRESULT WINAPI IDirectInputWImpl_QueryInterface(LPDIRECTINPUT7W iface, REFIID riid, LPVOID *ppobj) +static HRESULT WINAPI IDirectInputAImpl_QueryInterface( IDirectInput7A *iface, REFIID riid, LPVOID *ppobj ) { - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); - return IDirectInputAImpl_QueryInterface( &This->IDirectInput7A_iface, riid, ppobj ); + IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + return IDirectInput_QueryInterface( &This->IDirectInput7W_iface, riid, ppobj ); }
static LRESULT WINAPI di_em_win_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) @@ -744,9 +744,9 @@ enum directinput_versions DIRECTINPUT_VERSION_700 = 0x0700, };
-static HRESULT WINAPI IDirectInputAImpl_Initialize(LPDIRECTINPUT7A iface, HINSTANCE hinst, DWORD version) +static HRESULT WINAPI IDirectInputWImpl_Initialize( IDirectInput7W *iface, HINSTANCE hinst, DWORD version ) { - IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
TRACE("(%p)->(%p, 0x%04x)\n", This, hinst, version);
@@ -765,17 +765,17 @@ static HRESULT WINAPI IDirectInputAImpl_Initialize(LPDIRECTINPUT7A iface, HINSTA return initialize_directinput_instance(This, version); }
-static HRESULT WINAPI IDirectInputWImpl_Initialize(LPDIRECTINPUT7W iface, HINSTANCE hinst, DWORD x) +static HRESULT WINAPI IDirectInputAImpl_Initialize( IDirectInput7A *iface, HINSTANCE hinst, DWORD version ) { - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); - return IDirectInputAImpl_Initialize( &This->IDirectInput7A_iface, hinst, x ); + IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + return IDirectInput_Initialize( &This->IDirectInput7W_iface, hinst, version ); }
-static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus(LPDIRECTINPUT7A iface, REFGUID rguid) +static HRESULT WINAPI IDirectInputWImpl_GetDeviceStatus( IDirectInput7W *iface, REFGUID rguid ) { - IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); HRESULT hr; - LPDIRECTINPUTDEVICEA device; + IDirectInputDeviceW *device;
TRACE( "(%p)->(%s)\n", This, debugstr_guid(rguid) );
@@ -791,22 +791,19 @@ static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus(LPDIRECTINPUT7A iface, R return DI_OK; }
-static HRESULT WINAPI IDirectInputWImpl_GetDeviceStatus(LPDIRECTINPUT7W iface, REFGUID rguid) +static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus( IDirectInput7A *iface, REFGUID rguid ) { - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); - return IDirectInputAImpl_GetDeviceStatus( &This->IDirectInput7A_iface, rguid ); + IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + return IDirectInput_GetDeviceStatus( &This->IDirectInput7W_iface, rguid ); }
-static HRESULT WINAPI IDirectInputAImpl_RunControlPanel(LPDIRECTINPUT7A iface, - HWND hwndOwner, - DWORD dwFlags) +static HRESULT WINAPI IDirectInputWImpl_RunControlPanel( IDirectInput7W *iface, HWND hwndOwner, DWORD dwFlags ) { + IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); WCHAR control_exeW[] = {'c','o','n','t','r','o','l','.','e','x','e',0}; STARTUPINFOW si = {0}; PROCESS_INFORMATION pi;
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); - TRACE( "(%p)->(%p, %08x)\n", This, hwndOwner, dwFlags );
if (hwndOwner && !IsWindow(hwndOwner)) @@ -824,10 +821,10 @@ static HRESULT WINAPI IDirectInputAImpl_RunControlPanel(LPDIRECTINPUT7A iface, return DI_OK; }
-static HRESULT WINAPI IDirectInputWImpl_RunControlPanel(LPDIRECTINPUT7W iface, HWND hwndOwner, DWORD dwFlags) +static HRESULT WINAPI IDirectInputAImpl_RunControlPanel( IDirectInput7A *iface, HWND hwndOwner, DWORD dwFlags ) { - IDirectInputImpl *This = impl_from_IDirectInput7W( iface ); - return IDirectInputAImpl_RunControlPanel( &This->IDirectInput7A_iface, hwndOwner, dwFlags ); + IDirectInputImpl *This = impl_from_IDirectInput7A( iface ); + return IDirectInput_RunControlPanel( &This->IDirectInput7W_iface, hwndOwner, dwFlags ); }
static HRESULT WINAPI IDirectInput2AImpl_FindDevice(LPDIRECTINPUT7A iface, REFGUID rguid, @@ -900,13 +897,13 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, R static HRESULT WINAPI IDirectInputAImpl_CreateDevice(LPDIRECTINPUT7A iface, REFGUID rguid, LPDIRECTINPUTDEVICEA* pdev, LPUNKNOWN punk) { - return IDirectInput7AImpl_CreateDeviceEx(iface, rguid, NULL, (LPVOID*)pdev, punk); + return IDirectInput7_CreateDeviceEx( iface, rguid, NULL, (LPVOID *)pdev, punk ); }
static HRESULT WINAPI IDirectInputWImpl_CreateDevice(LPDIRECTINPUT7W iface, REFGUID rguid, LPDIRECTINPUTDEVICEW* pdev, LPUNKNOWN punk) { - return IDirectInput7WImpl_CreateDeviceEx(iface, rguid, NULL, (LPVOID*)pdev, punk); + return IDirectInput7_CreateDeviceEx( iface, rguid, NULL, (LPVOID *)pdev, punk ); }
/******************************************************************************* @@ -916,94 +913,94 @@ static HRESULT WINAPI IDirectInputWImpl_CreateDevice(LPDIRECTINPUT7W iface, REFG static ULONG WINAPI IDirectInput8AImpl_AddRef(LPDIRECTINPUT8A iface) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInputAImpl_AddRef( &This->IDirectInput7A_iface ); + return IDirectInput_AddRef( &This->IDirectInput7A_iface ); }
static ULONG WINAPI IDirectInput8WImpl_AddRef(LPDIRECTINPUT8W iface) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInputAImpl_AddRef( &This->IDirectInput7A_iface ); + return IDirectInput_AddRef( &This->IDirectInput7W_iface ); }
static HRESULT WINAPI IDirectInput8AImpl_QueryInterface(LPDIRECTINPUT8A iface, REFIID riid, LPVOID *ppobj) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInputAImpl_QueryInterface( &This->IDirectInput7A_iface, riid, ppobj ); + return IDirectInput_QueryInterface( &This->IDirectInput7A_iface, riid, ppobj ); }
static HRESULT WINAPI IDirectInput8WImpl_QueryInterface(LPDIRECTINPUT8W iface, REFIID riid, LPVOID *ppobj) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInputAImpl_QueryInterface( &This->IDirectInput7A_iface, riid, ppobj ); + return IDirectInput_QueryInterface( &This->IDirectInput7W_iface, riid, ppobj ); }
static ULONG WINAPI IDirectInput8AImpl_Release(LPDIRECTINPUT8A iface) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInputAImpl_Release( &This->IDirectInput7A_iface ); + return IDirectInput_Release( &This->IDirectInput7A_iface ); }
static ULONG WINAPI IDirectInput8WImpl_Release(LPDIRECTINPUT8W iface) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInputAImpl_Release( &This->IDirectInput7A_iface ); + return IDirectInput_Release( &This->IDirectInput7W_iface ); }
static HRESULT WINAPI IDirectInput8AImpl_CreateDevice(LPDIRECTINPUT8A iface, REFGUID rguid, LPDIRECTINPUTDEVICE8A* pdev, LPUNKNOWN punk) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInput7AImpl_CreateDeviceEx( &This->IDirectInput7A_iface, rguid, NULL, (LPVOID*)pdev, punk ); + return IDirectInput7_CreateDeviceEx( &This->IDirectInput7A_iface, rguid, NULL, (LPVOID *)pdev, punk ); }
static HRESULT WINAPI IDirectInput8WImpl_CreateDevice(LPDIRECTINPUT8W iface, REFGUID rguid, LPDIRECTINPUTDEVICE8W* pdev, LPUNKNOWN punk) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInput7WImpl_CreateDeviceEx( &This->IDirectInput7W_iface, rguid, NULL, (LPVOID*)pdev, punk ); + return IDirectInput7_CreateDeviceEx( &This->IDirectInput7W_iface, rguid, NULL, (LPVOID *)pdev, punk ); }
static HRESULT WINAPI IDirectInput8AImpl_EnumDevices(LPDIRECTINPUT8A iface, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInputAImpl_EnumDevices( &This->IDirectInput7A_iface, dwDevType, lpCallback, pvRef, dwFlags ); + return IDirectInput_EnumDevices( &This->IDirectInput7A_iface, dwDevType, lpCallback, pvRef, dwFlags ); }
static HRESULT WINAPI IDirectInput8WImpl_EnumDevices(LPDIRECTINPUT8W iface, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInputWImpl_EnumDevices( &This->IDirectInput7W_iface, dwDevType, lpCallback, pvRef, dwFlags ); + return IDirectInput_EnumDevices( &This->IDirectInput7W_iface, dwDevType, lpCallback, pvRef, dwFlags ); }
static HRESULT WINAPI IDirectInput8AImpl_GetDeviceStatus(LPDIRECTINPUT8A iface, REFGUID rguid) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInputAImpl_GetDeviceStatus( &This->IDirectInput7A_iface, rguid ); + return IDirectInput_GetDeviceStatus( &This->IDirectInput7A_iface, rguid ); }
static HRESULT WINAPI IDirectInput8WImpl_GetDeviceStatus(LPDIRECTINPUT8W iface, REFGUID rguid) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInputAImpl_GetDeviceStatus( &This->IDirectInput7A_iface, rguid ); + return IDirectInput_GetDeviceStatus( &This->IDirectInput7W_iface, rguid ); }
static HRESULT WINAPI IDirectInput8AImpl_RunControlPanel(LPDIRECTINPUT8A iface, HWND hwndOwner, DWORD dwFlags) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInputAImpl_RunControlPanel( &This->IDirectInput7A_iface, hwndOwner, dwFlags ); + return IDirectInput_RunControlPanel( &This->IDirectInput7A_iface, hwndOwner, dwFlags ); }
static HRESULT WINAPI IDirectInput8WImpl_RunControlPanel(LPDIRECTINPUT8W iface, HWND hwndOwner, DWORD dwFlags) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInputAImpl_RunControlPanel( &This->IDirectInput7A_iface, hwndOwner, dwFlags ); + return IDirectInput_RunControlPanel( &This->IDirectInput7W_iface, hwndOwner, dwFlags ); }
-static HRESULT WINAPI IDirectInput8AImpl_Initialize(LPDIRECTINPUT8A iface, HINSTANCE hinst, DWORD version) +static HRESULT WINAPI IDirectInput8WImpl_Initialize( IDirectInput8W *iface, HINSTANCE hinst, DWORD version ) { - IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); + IDirectInputImpl *This = impl_from_IDirectInput8W( iface );
TRACE("(%p)->(%p, 0x%04x)\n", This, hinst, version);
@@ -1019,22 +1016,22 @@ static HRESULT WINAPI IDirectInput8AImpl_Initialize(LPDIRECTINPUT8A iface, HINST return initialize_directinput_instance(This, version); }
-static HRESULT WINAPI IDirectInput8WImpl_Initialize(LPDIRECTINPUT8W iface, HINSTANCE hinst, DWORD version) +static HRESULT WINAPI IDirectInput8AImpl_Initialize( IDirectInput8A *iface, HINSTANCE hinst, DWORD version ) { - IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInput8AImpl_Initialize( &This->IDirectInput8A_iface, hinst, version ); + IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); + return IDirectInput8_Initialize( &This->IDirectInput8W_iface, hinst, version ); }
static HRESULT WINAPI IDirectInput8AImpl_FindDevice(LPDIRECTINPUT8A iface, REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) { IDirectInputImpl *This = impl_from_IDirectInput8A( iface ); - return IDirectInput2AImpl_FindDevice( &This->IDirectInput7A_iface, rguid, pszName, pguidInstance ); + return IDirectInput2_FindDevice( &This->IDirectInput7A_iface, rguid, pszName, pguidInstance ); }
static HRESULT WINAPI IDirectInput8WImpl_FindDevice(LPDIRECTINPUT8W iface, REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) { IDirectInputImpl *This = impl_from_IDirectInput8W( iface ); - return IDirectInput2WImpl_FindDevice( &This->IDirectInput7W_iface, rguid, pszName, pguidInstance ); + return IDirectInput2_FindDevice( &This->IDirectInput7W_iface, rguid, pszName, pguidInstance ); }
static BOOL should_enumerate_device(const WCHAR *username, DWORD dwFlags, @@ -1340,7 +1337,7 @@ static HRESULT WINAPI IDirectInput8AImpl_ConfigureDevices( diafW.rgoAction[i].u.lptszActionName = to; }
- hr = IDirectInput8WImpl_ConfigureDevices(&This->IDirectInput8W_iface, lpdiCallback, &diCDParamsW, dwFlags, pvRefData); + hr = IDirectInput8_ConfigureDevices( &This->IDirectInput8W_iface, lpdiCallback, &diCDParamsW, dwFlags, pvRefData );
/* Copy back configuration */ if (SUCCEEDED(hr)) @@ -1367,19 +1364,19 @@ static inline IDirectInputImpl *impl_from_IDirectInputJoyConfig8(IDirectInputJoy static HRESULT WINAPI JoyConfig8Impl_QueryInterface(IDirectInputJoyConfig8 *iface, REFIID riid, void** ppobj) { IDirectInputImpl *This = impl_from_IDirectInputJoyConfig8( iface ); - return IDirectInputAImpl_QueryInterface( &This->IDirectInput7A_iface, riid, ppobj ); + return IDirectInput_QueryInterface( &This->IDirectInput7W_iface, riid, ppobj ); }
static ULONG WINAPI JoyConfig8Impl_AddRef(IDirectInputJoyConfig8 *iface) { IDirectInputImpl *This = impl_from_IDirectInputJoyConfig8( iface ); - return IDirectInputAImpl_AddRef( &This->IDirectInput7A_iface ); + return IDirectInput_AddRef( &This->IDirectInput7W_iface ); }
static ULONG WINAPI JoyConfig8Impl_Release(IDirectInputJoyConfig8 *iface) { IDirectInputImpl *This = impl_from_IDirectInputJoyConfig8( iface ); - return IDirectInputAImpl_Release( &This->IDirectInput7A_iface ); + return IDirectInput_Release( &This->IDirectInput7W_iface ); }
static HRESULT WINAPI JoyConfig8Impl_Acquire(IDirectInputJoyConfig8 *iface) diff --git a/dlls/dinput/tests/dinput.c b/dlls/dinput/tests/dinput.c index 5947b17468b..c7fa0b76397 100644 --- a/dlls/dinput/tests/dinput.c +++ b/dlls/dinput/tests/dinput.c @@ -286,7 +286,7 @@ static void test_QueryInterface(void)
IDirectInputA *pDI; HRESULT hr; - IUnknown *pUnk; + IUnknown *pUnk, *iface, *tmp_iface; int i;
hr = DirectInputCreateA(hInstance, DIRECTINPUT_VERSION, &pDI, NULL); @@ -324,6 +324,34 @@ static void test_QueryInterface(void) ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk); }
+ hr = IUnknown_QueryInterface( pDI, &IID_IDirectInputA, (void **)&iface ); + ok( SUCCEEDED(hr), "IUnknown_QueryInterface(IID_IDirectInputA) failed: %08x\n", hr ); + hr = IUnknown_QueryInterface( pDI, &IID_IDirectInput2A, (void **)&tmp_iface ); + ok( SUCCEEDED(hr), "IUnknown_QueryInterface(IID_IDirectInput2A) failed: %08x\n", hr ); + ok( tmp_iface == iface, "IID_IDirectInput2A iface differs from IID_IDirectInputA\n" ); + IUnknown_Release( tmp_iface ); + hr = IUnknown_QueryInterface( pDI, &IID_IDirectInput7A, (void **)&tmp_iface ); + ok( SUCCEEDED(hr), "IUnknown_QueryInterface(IID_IDirectInput7A) failed: %08x\n", hr ); + ok( tmp_iface == iface, "IID_IDirectInput7A iface differs from IID_IDirectInputA\n" ); + IUnknown_Release( tmp_iface ); + IUnknown_Release( iface ); + + hr = IUnknown_QueryInterface( pDI, &IID_IUnknown, (void **)&iface ); + ok( SUCCEEDED(hr), "IUnknown_QueryInterface(IID_IUnknown) failed: %08x\n", hr ); + hr = IUnknown_QueryInterface( pDI, &IID_IDirectInputW, (void **)&tmp_iface ); + ok( SUCCEEDED(hr), "IUnknown_QueryInterface(IID_IDirectInputW) failed: %08x\n", hr ); + ok( tmp_iface == iface, "IID_IDirectInputW iface differs from IID_IUnknown\n" ); + IUnknown_Release( tmp_iface ); + hr = IUnknown_QueryInterface( pDI, &IID_IDirectInput2W, (void **)&tmp_iface ); + ok( SUCCEEDED(hr), "IUnknown_QueryInterface(IID_IDirectInput2W) failed: %08x\n", hr ); + ok( tmp_iface == iface, "IID_IDirectInput2W iface differs from IID_IUnknown\n" ); + IUnknown_Release( tmp_iface ); + hr = IUnknown_QueryInterface( pDI, &IID_IDirectInput7W, (void **)&tmp_iface ); + ok( SUCCEEDED(hr), "IUnknown_QueryInterface(IID_IDirectInput7W) failed: %08x\n", hr ); + ok( tmp_iface == iface, "IID_IDirectInput7W iface differs from IID_IUnknown\n" ); + IUnknown_Release( tmp_iface ); + IUnknown_Release( iface ); + IDirectInput_Release(pDI); }