From a84d2fe20e5479fae8ea9660167ebfac95eafa99 Mon Sep 17 00:00:00 2001 From: Vitaliy Margolen Date: Sat, 26 Nov 2011 10:30:07 -0700 Subject: [PATCH] dinput: Stub IDirectInputJoyConfig8 interface. --- dlls/dinput/dinput_main.c | 159 +++++++++++++++++++++++ dlls/dinput/dinput_private.h | 2 + dlls/dinput8/tests/dinput.c | 17 ++- include/Makefile.in | 1 + include/dinputd.h | 243 +++++++++++++++++++++++++++++++++++ 5 files changed, 420 insertions(+), 2 deletions(-) create mode 100644 include/dinputd.h diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c index c121ae9ea44..7fd30fd8b1d 100644 --- a/dlls/dinput/dinput_main.c +++ b/dlls/dinput/dinput_main.c @@ -46,8 +46,10 @@ #include "winerror.h" #include "objbase.h" #include "rpcproxy.h" +#include "initguid.h" #include "dinput_private.h" #include "device_private.h" +#include "dinputd.h" WINE_DEFAULT_DEBUG_CHANNEL(dinput); @@ -55,6 +57,7 @@ static const IDirectInput7AVtbl ddi7avt; static const IDirectInput7WVtbl ddi7wvt; static const IDirectInput8AVtbl ddi8avt; static const IDirectInput8WVtbl ddi8wvt; +static const IDirectInputJoyConfig8Vtbl JoyConfig8vt; static inline IDirectInputImpl *impl_from_IDirectInput7A( IDirectInput7A *iface ) { @@ -116,6 +119,7 @@ static HRESULT create_directinput_instance(REFIID riid, LPVOID *ppDI, IDirectInp This->IDirectInput7W_iface.lpVtbl = &ddi7wvt; This->IDirectInput8A_iface.lpVtbl = &ddi8avt; This->IDirectInput8W_iface.lpVtbl = &ddi8wvt; + This->IDirectInputJoyConfig8_iface.lpVtbl = &JoyConfig8vt; hr = IDirectInput_QueryInterface( &This->IDirectInput7A_iface, riid, ppDI ); if (FAILED(hr)) @@ -493,6 +497,14 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE return DI_OK; } + if (IsEqualGUID( &IID_IDirectInputJoyConfig8, riid )) + { + *ppobj = &This->IDirectInputJoyConfig8_iface; + IUnknown_AddRef( (IUnknown*)*ppobj ); + + return DI_OK; + } + FIXME( "Unsupported interface: %s\n", debugstr_guid(riid)); *ppobj = NULL; return E_NOINTERFACE; @@ -1046,6 +1058,130 @@ static HRESULT WINAPI IDirectInput8AImpl_ConfigureDevices( return hr; } +/***************************************************************************** + * IDirectInputJoyConfig8 interface + */ + +static inline IDirectInputImpl *impl_from_IDirectInputJoyConfig8(IDirectInputJoyConfig8 *iface) +{ + return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInputJoyConfig8_iface ); +} + +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 ); +} + +static ULONG WINAPI JoyConfig8Impl_AddRef(IDirectInputJoyConfig8 *iface) +{ + IDirectInputImpl *This = impl_from_IDirectInputJoyConfig8( iface ); + return IDirectInputAImpl_AddRef( &This->IDirectInput7A_iface ); +} + +static ULONG WINAPI JoyConfig8Impl_Release(IDirectInputJoyConfig8 *iface) +{ + IDirectInputImpl *This = impl_from_IDirectInputJoyConfig8( iface ); + return IDirectInputAImpl_Release( &This->IDirectInput7A_iface ); +} + +static HRESULT WINAPI JoyConfig8Impl_Acquire(IDirectInputJoyConfig8 *iface) +{ + FIXME( "(%p): stub!\n", iface ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_Unacquire(IDirectInputJoyConfig8 *iface) +{ + FIXME( "(%p): stub!\n", iface ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_SetCooperativeLevel(IDirectInputJoyConfig8 *iface, HWND hwnd, DWORD flags) +{ + FIXME( "(%p)->(%p, 0x%08x): stub!\n", iface, hwnd, flags ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_SendNotify(IDirectInputJoyConfig8 *iface) +{ + FIXME( "(%p): stub!\n", iface ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_EnumTypes(IDirectInputJoyConfig8 *iface, LPDIJOYTYPECALLBACK cb, void *ref) +{ + FIXME( "(%p)->(%p, %p): stub!\n", iface, cb, ref ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_GetTypeInfo(IDirectInputJoyConfig8 *iface, LPCWSTR name, LPDIJOYTYPEINFO info, DWORD flags) +{ + FIXME( "(%p)->(%s, %p, 0x%08x): stub!\n", iface, debugstr_w(name), info, flags ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_SetTypeInfo(IDirectInputJoyConfig8 *iface, LPCWSTR name, LPCDIJOYTYPEINFO info, DWORD flags, + LPWSTR new_name) +{ + FIXME( "(%p)->(%s, %p, 0x%08x, %s): stub!\n", iface, debugstr_w(name), info, flags, debugstr_w(new_name) ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_DeleteType(IDirectInputJoyConfig8 *iface, LPCWSTR name) +{ + FIXME( "(%p)->(%s): stub!\n", iface, debugstr_w(name) ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_GetConfig(IDirectInputJoyConfig8 *iface, UINT id, LPDIJOYCONFIG info, DWORD flags) +{ + FIXME( "(%p)->(%d, %p, 0x%08x): stub!\n", iface, id, info, flags ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_SetConfig(IDirectInputJoyConfig8 *iface, UINT id, LPCDIJOYCONFIG info, DWORD flags) +{ + FIXME( "(%p)->(%d, %p, 0x%08x): stub!\n", iface, id, info, flags ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_DeleteConfig(IDirectInputJoyConfig8 *iface, UINT id) +{ + FIXME( "(%p)->(%d): stub!\n", iface, id ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_GetUserValues(IDirectInputJoyConfig8 *iface, LPDIJOYUSERVALUES info, DWORD flags) +{ + FIXME( "(%p)->(%p, 0x%08x): stub!\n", iface, info, flags ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_SetUserValues(IDirectInputJoyConfig8 *iface, LPCDIJOYUSERVALUES info, DWORD flags) +{ + FIXME( "(%p)->(%p, 0x%08x): stub!\n", iface, info, flags ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_AddNewHardware(IDirectInputJoyConfig8 *iface, HWND hwnd, REFGUID guid) +{ + FIXME( "(%p)->(%p, %s): stub!\n", iface, hwnd, debugstr_guid(guid) ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_OpenTypeKey(IDirectInputJoyConfig8 *iface, LPCWSTR name, DWORD security, PHKEY key) +{ + FIXME( "(%p)->(%s, 0x%08x, %p): stub!\n", iface, debugstr_w(name), security, key ); + return E_NOTIMPL; +} + +static HRESULT WINAPI JoyConfig8Impl_OpenAppStatusKey(IDirectInputJoyConfig8 *iface, PHKEY key) +{ + FIXME( "(%p)->(%p): stub!\n", iface, key ); + return E_NOTIMPL; +} + static const IDirectInput7AVtbl ddi7avt = { IDirectInputAImpl_QueryInterface, IDirectInputAImpl_AddRef, @@ -1100,6 +1236,29 @@ static const IDirectInput8WVtbl ddi8wvt = { IDirectInput8WImpl_ConfigureDevices }; +static const IDirectInputJoyConfig8Vtbl JoyConfig8vt = +{ + JoyConfig8Impl_QueryInterface, + JoyConfig8Impl_AddRef, + JoyConfig8Impl_Release, + JoyConfig8Impl_Acquire, + JoyConfig8Impl_Unacquire, + JoyConfig8Impl_SetCooperativeLevel, + JoyConfig8Impl_SendNotify, + JoyConfig8Impl_EnumTypes, + JoyConfig8Impl_GetTypeInfo, + JoyConfig8Impl_SetTypeInfo, + JoyConfig8Impl_DeleteType, + JoyConfig8Impl_GetConfig, + JoyConfig8Impl_SetConfig, + JoyConfig8Impl_DeleteConfig, + JoyConfig8Impl_GetUserValues, + JoyConfig8Impl_SetUserValues, + JoyConfig8Impl_AddNewHardware, + JoyConfig8Impl_OpenTypeKey, + JoyConfig8Impl_OpenAppStatusKey +}; + /******************************************************************************* * DirectInput ClassFactory */ diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h index 9a5c8bad62d..8efb42ed0b2 100644 --- a/dlls/dinput/dinput_private.h +++ b/dlls/dinput/dinput_private.h @@ -24,6 +24,7 @@ #include "windef.h" #include "winbase.h" #include "dinput.h" +#include "dinputd.h" #include "wine/list.h" /* Implementation specification */ @@ -34,6 +35,7 @@ struct IDirectInputImpl IDirectInput7W IDirectInput7W_iface; IDirectInput8A IDirectInput8A_iface; IDirectInput8W IDirectInput8W_iface; + IDirectInputJoyConfig8 IDirectInputJoyConfig8_iface; LONG ref; diff --git a/dlls/dinput8/tests/dinput.c b/dlls/dinput8/tests/dinput.c index e11430aae08..820873519a8 100644 --- a/dlls/dinput8/tests/dinput.c +++ b/dlls/dinput8/tests/dinput.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "wine/test.h" @@ -225,7 +226,7 @@ static void test_DirectInput8Create(void) static void test_QueryInterface(void) { - static REFIID iid_list[] = {&IID_IUnknown, &IID_IDirectInput8A, &IID_IDirectInput8W}; + static REFIID iid_list[] = {&IID_IUnknown, &IID_IDirectInput8A, &IID_IDirectInput8W, &IID_IDirectInputJoyConfig8}; static const struct { @@ -279,7 +280,19 @@ static void test_QueryInterface(void) 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); + if (pUnk) + { + int j; + for (j = 0; j < sizeof(iid_list)/sizeof(iid_list[0]); 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 < sizeof(no_interface_list)/sizeof(no_interface_list[0]); i++) diff --git a/include/Makefile.in b/include/Makefile.in index 00e9cf4a27d..bea68f0e08f 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -229,6 +229,7 @@ SRCDIR_INCLUDES = \ devpropdef.h \ digitalv.h \ dinput.h \ + dinputd.h \ dispdib.h \ dlgs.h \ dls1.h \ diff --git a/include/dinputd.h b/include/dinputd.h new file mode 100644 index 00000000000..ac24a2c56b1 --- /dev/null +++ b/include/dinputd.h @@ -0,0 +1,243 @@ +/* + * Copyright (C) the Wine project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __DINPUTD_INCLUDED__ +#define __DINPUTD_INCLUDED__ + +#define COM_NO_WINDOWS_H +#include + +#ifndef DIRECTINPUT_VERSION +#define DIRECTINPUT_VERSION 0x0800 +#endif + +DEFINE_GUID(IID_IDirectInputJoyConfig8, 0xEB0D7DFA,0x1990,0x4F27,0xB4,0xD6,0xED,0xF2,0xEE,0xC4,0xA4,0x4C); + +typedef struct IDirectInputJoyConfig8 *LPDIRECTINPUTJOYCONFIG8; + + +typedef BOOL (CALLBACK *LPDIJOYTYPECALLBACK)(LPCWSTR, LPVOID); + +#define MAX_JOYSTRING 256 +#ifndef MAX_JOYSTICKOEMVXDNAME +#define MAX_JOYSTICKOEMVXDNAME 260 +#endif + +#define JOY_POV_NUMDIRS 4 +#define JOY_POVVAL_FORWARD 0 +#define JOY_POVVAL_BACKWARD 1 +#define JOY_POVVAL_LEFT 2 +#define JOY_POVVAL_RIGHT 3 + +typedef struct joypos_tag +{ + DWORD dwX; + DWORD dwY; + DWORD dwZ; + DWORD dwR; + DWORD dwU; + DWORD dwV; +} JOYPOS, *LPJOYPOS; + +typedef struct joyrange_tag +{ + JOYPOS jpMin; + JOYPOS jpMax; + JOYPOS jpCenter; +} JOYRANGE, *LPJOYRANGE; + +typedef struct joyreguservalues_tag +{ + DWORD dwTimeOut; + JOYRANGE jrvRanges; + JOYPOS jpDeadZone; +} JOYREGUSERVALUES, *LPJOYREGUSERVALUES; + +typedef struct joyreghwsettings_tag +{ + DWORD dwFlags; + DWORD dwNumButtons; +} JOYREGHWSETTINGS, *LPJOYHWSETTINGS; + +typedef struct joyreghwvalues_tag +{ + JOYRANGE jrvHardware; + DWORD dwPOVValues[JOY_POV_NUMDIRS]; + DWORD dwCalFlags; +} JOYREGHWVALUES, *LPJOYREGHWVALUES; + +typedef struct joyreghwconfig_tag +{ + JOYREGHWSETTINGS hws; + DWORD dwUsageSettings; + JOYREGHWVALUES hwv; + DWORD dwType; + DWORD dwReserved; +} JOYREGHWCONFIG, *LPJOYREGHWCONFIG; + +typedef struct DIJOYTYPEINFO_DX5 +{ + DWORD dwSize; + JOYREGHWSETTINGS hws; + CLSID clsidConfig; + WCHAR wszDisplayName[MAX_JOYSTRING]; + WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME]; +} DIJOYTYPEINFO_DX5, *LPDIJOYTYPEINFO_DX5; +typedef const DIJOYTYPEINFO_DX5 *LPCDIJOYTYPEINFO_DX5; + +typedef struct DIJOYTYPEINFO_DX6 +{ + DWORD dwSize; + JOYREGHWSETTINGS hws; + CLSID clsidConfig; + WCHAR wszDisplayName[MAX_JOYSTRING]; + WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME]; + WCHAR wszHardwareId[MAX_JOYSTRING]; + DWORD dwFlags1; +} DIJOYTYPEINFO_DX6, *LPDIJOYTYPEINFO_DX6; +typedef const DIJOYTYPEINFO_DX6 *LPCDIJOYTYPEINFO_DX6; + +typedef struct DIJOYTYPEINFO +{ + DWORD dwSize; + JOYREGHWSETTINGS hws; + CLSID clsidConfig; + WCHAR wszDisplayName[MAX_JOYSTRING]; + WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME]; + WCHAR wszHardwareId[MAX_JOYSTRING]; + DWORD dwFlags1; + DWORD dwFlags2; + WCHAR wszMapFile[MAX_JOYSTRING]; +} DIJOYTYPEINFO, *LPDIJOYTYPEINFO; +typedef const DIJOYTYPEINFO *LPCDIJOYTYPEINFO; +#define DIJC_GUIDINSTANCE 0x00000001 +#define DIJC_REGHWCONFIGTYPE 0x00000002 +#define DIJC_GAIN 0x00000004 +#define DIJC_CALLOUT 0x00000008 +#define DIJC_WDMGAMEPORT 0x00000010 + +typedef struct DIJOYCONFIG_DX5 +{ + DWORD dwSize; + GUID guidInstance; + JOYREGHWCONFIG hwc; + DWORD dwGain; + WCHAR wszType[MAX_JOYSTRING]; + WCHAR wszCallout[MAX_JOYSTRING]; +} DIJOYCONFIG_DX5, *LPDIJOYCONFIG_DX5; +typedef const DIJOYCONFIG_DX5 *LPCDIJOYCONFIG_DX5; + +typedef struct DIJOYCONFIG +{ + DWORD dwSize; + GUID guidInstance; + JOYREGHWCONFIG hwc; + DWORD dwGain; + WCHAR wszType[MAX_JOYSTRING]; + WCHAR wszCallout[MAX_JOYSTRING]; + GUID guidGameport; +} DIJOYCONFIG, *LPDIJOYCONFIG; +typedef const DIJOYCONFIG *LPCDIJOYCONFIG; + +typedef struct DIJOYUSERVALUES +{ + DWORD dwSize; + JOYREGUSERVALUES ruv; + WCHAR wszGlobalDriver[MAX_JOYSTRING]; + WCHAR wszGameportEmulator[MAX_JOYSTRING]; +} DIJOYUSERVALUES, *LPDIJOYUSERVALUES; +typedef const DIJOYUSERVALUES *LPCDIJOYUSERVALUES; + + +/***************************************************************************** + * IDirectInputJoyConfig8 interface + */ +#define INTERFACE IDirectInputJoyConfig8 +DECLARE_INTERFACE_(IDirectInputJoyConfig8, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IDirectInputJoyConfig8 methods ***/ + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; + STDMETHOD(SendNotify)(THIS) PURE; + STDMETHOD(EnumTypes)(THIS_ LPDIJOYTYPECALLBACK, LPVOID) PURE; + STDMETHOD(GetTypeInfo)(THIS_ LPCWSTR, LPDIJOYTYPEINFO, DWORD) PURE; + STDMETHOD(SetTypeInfo)(THIS_ LPCWSTR, LPCDIJOYTYPEINFO, DWORD, LPWSTR) PURE; + STDMETHOD(DeleteType)(THIS_ LPCWSTR) PURE; + STDMETHOD(GetConfig)(THIS_ UINT, LPDIJOYCONFIG, DWORD) PURE; + STDMETHOD(SetConfig)(THIS_ UINT, LPCDIJOYCONFIG, DWORD) PURE; + STDMETHOD(DeleteConfig)(THIS_ UINT) PURE; + STDMETHOD(GetUserValues)(THIS_ LPDIJOYUSERVALUES, DWORD) PURE; + STDMETHOD(SetUserValues)(THIS_ LPCDIJOYUSERVALUES, DWORD) PURE; + STDMETHOD(AddNewHardware)(THIS_ HWND, REFGUID) PURE; + STDMETHOD(OpenTypeKey)(THIS_ LPCWSTR, DWORD, PHKEY) PURE; + STDMETHOD(OpenAppStatusKey)(THIS_ PHKEY) PURE; +}; +#undef INTERFACE + +#if !defined(__cplusplus) || defined(CINTERFACE) +/*** IUnknown methods ***/ +#define IDirectInputJoyConfig8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputJoyConfig8_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputJoyConfig8_Release(p) (p)->lpVtbl->Release(p) +/*** IDirectInputJoyConfig8 methods ***/ +#define IDirectInputJoyConfig8_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputJoyConfig8_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputJoyConfig8_SendNotify(p) (p)->lpVtbl->SendNotify(p) +#define IDirectInputJoyConfig8_EnumTypes(p,a,b) (p)->lpVtbl->EnumTypes(p,a,b) +#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c) +#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d) (p)->lpVtbl->SetTypeInfo(p,a,b,c,d) +#define IDirectInputJoyConfig8_DeleteType(p,a) (p)->lpVtbl->DeleteType(p,a) +#define IDirectInputJoyConfig8_GetConfig(p,a,b,c) (p)->lpVtbl->GetConfig(p,a,b,c) +#define IDirectInputJoyConfig8_SetConfig(p,a,b,c) (p)->lpVtbl->SetConfig(p,a,b,c) +#define IDirectInputJoyConfig8_DeleteConfig(p,a) (p)->lpVtbl->DeleteConfig(p,a) +#define IDirectInputJoyConfig8_GetUserValues(p,a,b) (p)->lpVtbl->GetUserValues(p,a,b) +#define IDirectInputJoyConfig8_SetUserValues(p,a,b) (p)->lpVtbl->SetUserValues(p,a,b) +#define IDirectInputJoyConfig8_AddNewHardware(p,a,b) (p)->lpVtbl->AddNewHardware(p,a,b) +#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c) (p)->lpVtbl->OpenTypeKey(p,a,b,c) +#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a) (p)->lpVtbl->OpenAppStatusKey(p,a) +#else +/*** IUnknown methods ***/ +#define IDirectInputJoyConfig8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputJoyConfig8_AddRef(p) (p)->AddRef() +#define IDirectInputJoyConfig8_Release(p) (p)->Release() +/*** IDirectInputJoyConfig8 methods ***/ +#define IDirectInputJoyConfig8_Acquire(p) (p)->Acquire() +#define IDirectInputJoyConfig8_Unacquire(p) (p)->Unacquire() +#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputJoyConfig8_SendNotify(p) (p)->SendNotify() +#define IDirectInputJoyConfig8_EnumTypes(p,a,b) (p)->EnumTypes(a,b) +#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c) (p)->GetTypeInfo(a,b,c) +#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d) (p)->SetTypeInfo(a,b,c,d) +#define IDirectInputJoyConfig8_DeleteType(p,a) (p)->DeleteType(a) +#define IDirectInputJoyConfig8_GetConfig(p,a,b,c) (p)->GetConfig(a,b,c) +#define IDirectInputJoyConfig8_SetConfig(p,a,b,c) (p)->SetConfig(a,b,c) +#define IDirectInputJoyConfig8_DeleteConfig(p,a) (p)->DeleteConfig(a) +#define IDirectInputJoyConfig8_GetUserValues(p,a,b) (p)->GetUserValues(a,b) +#define IDirectInputJoyConfig8_SetUserValues(p,a,b) (p)->SetUserValues(a,b) +#define IDirectInputJoyConfig8_AddNewHardware(p,a,b) (p)->AddNewHardware(a,b) +#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c) (p)->OpenTypeKey(a,b,c) +#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a) (p)->OpenAppStatusKey(a) +#endif + +#endif /* __DINPUTD_INCLUDED__ */