dinput: Fix some return values of IDirectInput::QueryInterface.
This commit is contained in:
parent
90e9e3103a
commit
c28512a5a6
|
@ -421,6 +421,9 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE
|
||||||
|
|
||||||
TRACE( "(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppobj );
|
TRACE( "(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppobj );
|
||||||
|
|
||||||
|
if (!riid || !ppobj)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
if (IsEqualGUID( &IID_IUnknown, riid ) ||
|
if (IsEqualGUID( &IID_IUnknown, riid ) ||
|
||||||
IsEqualGUID( &IID_IDirectInputA, riid ) ||
|
IsEqualGUID( &IID_IDirectInputA, riid ) ||
|
||||||
IsEqualGUID( &IID_IDirectInput2A, riid ) ||
|
IsEqualGUID( &IID_IDirectInput2A, riid ) ||
|
||||||
|
@ -459,7 +462,8 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE
|
||||||
}
|
}
|
||||||
|
|
||||||
FIXME( "Unsupported interface: %s\n", debugstr_guid(riid));
|
FIXME( "Unsupported interface: %s\n", debugstr_guid(riid));
|
||||||
return E_FAIL;
|
*ppobj = NULL;
|
||||||
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectInputWImpl_QueryInterface(LPDIRECTINPUT7W iface, REFIID riid, LPVOID *ppobj)
|
static HRESULT WINAPI IDirectInputWImpl_QueryInterface(LPDIRECTINPUT7W iface, REFIID riid, LPVOID *ppobj)
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
|
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "initguid.h"
|
|
||||||
#include "dinput.h"
|
#include "dinput.h"
|
||||||
|
|
||||||
static const DIOBJECTDATAFORMAT obj_data_format[] = {
|
static const DIOBJECTDATAFORMAT obj_data_format[] = {
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#define DIRECTINPUT_VERSION 0x0700
|
#define DIRECTINPUT_VERSION 0x0700
|
||||||
|
|
||||||
#define COBJMACROS
|
#define COBJMACROS
|
||||||
|
#include <initguid.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <dinput.h>
|
#include <dinput.h>
|
||||||
|
|
||||||
|
@ -26,6 +27,86 @@
|
||||||
|
|
||||||
HINSTANCE hInstance;
|
HINSTANCE hInstance;
|
||||||
|
|
||||||
|
static void test_QueryInterface(void)
|
||||||
|
{
|
||||||
|
static const REFIID iid_list[] = {&IID_IUnknown, &IID_IDirectInputA, &IID_IDirectInputW,
|
||||||
|
&IID_IDirectInput2A, &IID_IDirectInput2W,
|
||||||
|
&IID_IDirectInput7A, &IID_IDirectInput7W};
|
||||||
|
|
||||||
|
static const struct
|
||||||
|
{
|
||||||
|
REFIID riid;
|
||||||
|
int test_todo;
|
||||||
|
} no_interface_list[] =
|
||||||
|
{
|
||||||
|
{&IID_IDirectInput8A, 1},
|
||||||
|
{&IID_IDirectInput8W, 1},
|
||||||
|
{&IID_IDirectInputDeviceA},
|
||||||
|
{&IID_IDirectInputDeviceW},
|
||||||
|
{&IID_IDirectInputDevice2A},
|
||||||
|
{&IID_IDirectInputDevice2W},
|
||||||
|
{&IID_IDirectInputDevice7A},
|
||||||
|
{&IID_IDirectInputDevice7W},
|
||||||
|
{&IID_IDirectInputDevice8A},
|
||||||
|
{&IID_IDirectInputDevice8W},
|
||||||
|
{&IID_IDirectInputEffect},
|
||||||
|
};
|
||||||
|
|
||||||
|
IDirectInputA *pDI;
|
||||||
|
HRESULT hr;
|
||||||
|
IUnknown *pUnk;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
hr = DirectInputCreateA(hInstance, DIRECTINPUT_VERSION, &pDI, NULL);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
win_skip("Failed to instantiate a IDirectInputA instance: 0x%08x\n", hr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = IDirectInput_QueryInterface(pDI, NULL, NULL);
|
||||||
|
ok(hr == E_POINTER, "IDirectInput_QueryInterface returned 0x%08x\n", hr);
|
||||||
|
|
||||||
|
pUnk = (void *)0xdeadbeef;
|
||||||
|
hr = IDirectInput_QueryInterface(pDI, NULL, (void **)&pUnk);
|
||||||
|
ok(hr == E_POINTER, "IDirectInput_QueryInterface returned 0x%08x\n", hr);
|
||||||
|
ok(pUnk == (void *)0xdeadbeef, "Output interface pointer is %p\n", pUnk);
|
||||||
|
|
||||||
|
hr = IDirectInput_QueryInterface(pDI, &IID_IUnknown, NULL);
|
||||||
|
ok(hr == E_POINTER, "IDirectInput_QueryInterface returned 0x%08x\n", hr);
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(iid_list)/sizeof(iid_list[0]); i++)
|
||||||
|
{
|
||||||
|
pUnk = NULL;
|
||||||
|
hr = IDirectInput_QueryInterface(pDI, iid_list[i], (void **)&pUnk);
|
||||||
|
ok(hr == S_OK, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr);
|
||||||
|
ok(pUnk != NULL, "[%d] Output interface pointer is NULL\n", i);
|
||||||
|
if (pUnk) IUnknown_Release(pUnk);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(no_interface_list)/sizeof(no_interface_list[0]); i++)
|
||||||
|
{
|
||||||
|
pUnk = (void *)0xdeadbeef;
|
||||||
|
hr = IDirectInput_QueryInterface(pDI, no_interface_list[i].riid, (void **)&pUnk);
|
||||||
|
if (no_interface_list[i].test_todo)
|
||||||
|
{
|
||||||
|
todo_wine
|
||||||
|
ok(hr == E_NOINTERFACE, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr);
|
||||||
|
todo_wine
|
||||||
|
ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||||
|
|
||||||
|
if (pUnk) IUnknown_Release(pUnk);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok(hr == E_NOINTERFACE, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr);
|
||||||
|
ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IDirectInput_Release(pDI);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_RunControlPanel(void)
|
static void test_RunControlPanel(void)
|
||||||
{
|
{
|
||||||
IDirectInputA *pDI;
|
IDirectInputA *pDI;
|
||||||
|
@ -64,6 +145,7 @@ START_TEST(dinput)
|
||||||
hInstance = GetModuleHandleA(NULL);
|
hInstance = GetModuleHandleA(NULL);
|
||||||
|
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
|
test_QueryInterface();
|
||||||
test_RunControlPanel();
|
test_RunControlPanel();
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue