static void test_QueryInterface(void) { static REFIID iid_list[] = {&IID_IUnknown, &IID_IDirectInput8A, &IID_IDirectInput8W, &IID_IDirectInputJoyConfig8}; static REFIID no_interface_list[] = { &IID_IDirectInputA, &IID_IDirectInputW, &IID_IDirectInput2A, &IID_IDirectInput2W, &IID_IDirectInput7A, &IID_IDirectInput7W, &IID_IDirectInputDeviceA, &IID_IDirectInputDeviceW, &IID_IDirectInputDevice2A, &IID_IDirectInputDevice2W, &IID_IDirectInputDevice7A, &IID_IDirectInputDevice7W, &IID_IDirectInputDevice8A, &IID_IDirectInputDevice8W, &IID_IDirectInputEffect, }; IDirectInput8A *pDI; HRESULT hr; IUnknown *pUnk; int i; hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, &IID_IDirectInput8A, (void **)&pDI, NULL); if (FAILED(hr)) { win_skip("Failed to instantiate a IDirectInputA instance: 0x%08x\n", hr); return; } hr = IDirectInput8_QueryInterface(pDI, NULL, NULL); ok(hr == E_POINTER, "IDirectInput8_QueryInterface returned 0x%08x\n", hr); pUnk = (void *)0xdeadbeef; hr = IDirectInput8_QueryInterface(pDI, NULL, (void **)&pUnk); ok(hr == E_POINTER, "IDirectInput8_QueryInterface returned 0x%08x\n", hr); ok(pUnk == (void *)0xdeadbeef, "Output interface pointer is %p\n", pUnk); hr = IDirectInput8_QueryInterface(pDI, &IID_IUnknown, NULL); ok(hr == E_POINTER, "IDirectInput8_QueryInterface returned 0x%08x\n", hr); for (i = 0; i < ARRAY_SIZE(iid_list); i++) { pUnk = NULL; hr = IDirectInput8_QueryInterface(pDI, iid_list[i], (void **)&pUnk); ok(hr == S_OK, "[%d] IDirectInput8_QueryInterface returned 0x%08x\n", i, hr); ok(pUnk != NULL, "[%d] Output interface pointer is NULL\n", i); if (pUnk) { int j; for (j = 0; j < ARRAY_SIZE(iid_list); j++) { IUnknown *pUnk1 = NULL; hr = IDirectInput8_QueryInterface(pUnk, iid_list[j], (void **)&pUnk1); ok(hr == S_OK, "[%d] IDirectInput8_QueryInterface(pUnk) returned 0x%08x\n", j, hr); ok(pUnk1 != NULL, "[%d] Output interface pointer is NULL\n", i); if (pUnk1) IUnknown_Release(pUnk1); } IUnknown_Release(pUnk); } } for (i = 0; i < ARRAY_SIZE(no_interface_list); i++) { pUnk = (void *)0xdeadbeef; hr = IDirectInput8_QueryInterface(pDI, no_interface_list[i], (void **)&pUnk); ok(hr == E_NOINTERFACE, "[%d] IDirectInput8_QueryInterface returned 0x%08x\n", i, hr); ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk); } IDirectInput8_Release(pDI); }
static void test_QueryInterface(void) { static REFIID iid_list[] = {&IID_IUnknown, &IID_IDirectInput8A, &IID_IDirectInput8W}; static const struct { REFIID riid; int test_todo; } no_interface_list[] = { {&IID_IDirectInputA, 1}, {&IID_IDirectInputW, 1}, {&IID_IDirectInput2A, 1}, {&IID_IDirectInput2W, 1}, {&IID_IDirectInput7A, 1}, {&IID_IDirectInput7W, 1}, {&IID_IDirectInputDeviceA}, {&IID_IDirectInputDeviceW}, {&IID_IDirectInputDevice2A}, {&IID_IDirectInputDevice2W}, {&IID_IDirectInputDevice7A}, {&IID_IDirectInputDevice7W}, {&IID_IDirectInputDevice8A}, {&IID_IDirectInputDevice8W}, {&IID_IDirectInputEffect}, }; IDirectInput8A *pDI; HRESULT hr; IUnknown *pUnk; int i; hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, &IID_IDirectInput8A, (void **)&pDI, NULL); if (FAILED(hr)) { win_skip("Failed to instantiate a IDirectInputA instance: 0x%08x\n", hr); return; } hr = IDirectInput8_QueryInterface(pDI, NULL, NULL); ok(hr == E_POINTER, "IDirectInput8_QueryInterface returned 0x%08x\n", hr); pUnk = (void *)0xdeadbeef; hr = IDirectInput8_QueryInterface(pDI, NULL, (void **)&pUnk); ok(hr == E_POINTER, "IDirectInput8_QueryInterface returned 0x%08x\n", hr); ok(pUnk == (void *)0xdeadbeef, "Output interface pointer is %p\n", pUnk); hr = IDirectInput8_QueryInterface(pDI, &IID_IUnknown, NULL); ok(hr == E_POINTER, "IDirectInput8_QueryInterface returned 0x%08x\n", hr); for (i = 0; i < sizeof(iid_list)/sizeof(iid_list[0]); i++) { pUnk = NULL; hr = IDirectInput8_QueryInterface(pDI, iid_list[i], (void **)&pUnk); ok(hr == S_OK, "[%d] IDirectInput8_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 = IDirectInput8_QueryInterface(pDI, no_interface_list[i].riid, (void **)&pUnk); if (no_interface_list[i].test_todo) { todo_wine ok(hr == E_NOINTERFACE, "[%d] IDirectInput8_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] IDirectInput8_QueryInterface returned 0x%08x\n", i, hr); ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk); } } IDirectInput8_Release(pDI); }