[PATCH 6/6] dinput: Move IDirectInput7 WtoA wrappers to ansi.c.
Rémi Bernon
rbernon at codeweavers.com
Fri May 28 04:41:31 CDT 2021
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/dinput/ansi.c | 122 ++++++++++++++++++++++++++++++++++
dlls/dinput/dinput_main.c | 124 +----------------------------------
dlls/dinput/dinput_private.h | 1 +
3 files changed, 124 insertions(+), 123 deletions(-)
diff --git a/dlls/dinput/ansi.c b/dlls/dinput/ansi.c
index f60aa8c729d..431b812aeb2 100644
--- a/dlls/dinput/ansi.c
+++ b/dlls/dinput/ansi.c
@@ -49,6 +49,21 @@ static inline IDirectInputDevice8A *IDirectInputDevice8A_from_IDirectInputDevice
return &CONTAINING_RECORD( iface, IDirectInputDeviceImpl, IDirectInputDevice8W_iface )->IDirectInputDevice8A_iface;
}
+static inline IDirectInputDeviceA *IDirectInputDeviceA_from_IDirectInputDeviceW( IDirectInputDeviceW *iface )
+{
+ return (IDirectInputDeviceA *)IDirectInputDevice8A_from_IDirectInputDevice8W( (IDirectInputDevice8W *)iface );
+}
+
+static IDirectInputImpl *impl_from_IDirectInput7A( IDirectInput7A *iface )
+{
+ return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7A_iface );
+}
+
+static IDirectInput7W *IDirectInput7W_from_impl( IDirectInputImpl *impl )
+{
+ return &impl->IDirectInput7W_iface;
+}
+
static IDirectInputImpl *impl_from_IDirectInput8A( IDirectInput8A *iface )
{
return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput8A_iface );
@@ -852,3 +867,110 @@ const IDirectInput8AVtbl dinput8_a_vtbl =
dinput8_a_EnumDevicesBySemantics,
dinput8_a_ConfigureDevices,
};
+
+static HRESULT WINAPI dinput7_a_QueryInterface( IDirectInput7A *iface_a, REFIID iid, void **out )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ return IDirectInput7_QueryInterface( iface_w, iid, out );
+}
+
+static ULONG WINAPI dinput7_a_AddRef( IDirectInput7A *iface_a )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ return IDirectInput7_AddRef( iface_w );
+}
+
+static ULONG WINAPI dinput7_a_Release( IDirectInput7A *iface_a )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ return IDirectInput7_Release( iface_w );
+}
+
+static HRESULT WINAPI dinput7_a_CreateDevice( IDirectInput7A *iface_a, REFGUID guid, IDirectInputDeviceA **out_a, IUnknown *outer )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ IDirectInputDeviceW *out_w;
+ HRESULT hr;
+
+ if (!out_a) return E_POINTER;
+
+ hr = IDirectInput7_CreateDevice( iface_w, guid, &out_w, outer );
+ *out_a = IDirectInputDeviceA_from_IDirectInputDeviceW( out_w );
+ return hr;
+}
+
+static HRESULT WINAPI dinput7_a_EnumDevices( IDirectInput7A *iface_a, DWORD type, LPDIENUMDEVICESCALLBACKA callback,
+ void *ref, DWORD flags )
+{
+ struct enum_devices_wtoa_params params = {callback, ref};
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+
+ if (!callback) return DIERR_INVALIDPARAM;
+
+ return IDirectInput7_EnumDevices( iface_w, type, enum_devices_wtoa_callback, ¶ms, flags );
+}
+
+static HRESULT WINAPI dinput7_a_GetDeviceStatus( IDirectInput7A *iface_a, REFGUID instance_guid )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ return IDirectInput7_GetDeviceStatus( iface_w, instance_guid );
+}
+
+static HRESULT WINAPI dinput7_a_RunControlPanel( IDirectInput7A *iface_a, HWND owner, DWORD flags )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ return IDirectInput7_RunControlPanel( iface_w, owner, flags );
+}
+
+static HRESULT WINAPI dinput7_a_Initialize( IDirectInput7A *iface_a, HINSTANCE instance, DWORD version )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ return IDirectInput7_Initialize( iface_w, instance, version );
+}
+
+static HRESULT WINAPI dinput7_a_FindDevice( IDirectInput7A *iface_a, REFGUID guid, const char *name_a, GUID *instance_guid )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ HRESULT hr;
+ WCHAR *name_w;
+
+ if (FAILED(hr = string_atow( name_a, &name_w ))) return hr;
+
+ hr = IDirectInput7_FindDevice( iface_w, guid, name_w, instance_guid );
+ HeapFree( GetProcessHeap(), 0, name_w );
+ return hr;
+}
+
+static HRESULT WINAPI dinput7_a_CreateDeviceEx( IDirectInput7A *iface_a, REFGUID guid, REFIID iid, void **out, IUnknown *outer )
+{
+ IDirectInputImpl *impl = impl_from_IDirectInput7A( iface_a );
+ IDirectInput7W *iface_w = IDirectInput7W_from_impl( impl );
+ return IDirectInput7_CreateDeviceEx( iface_w, guid, iid, out, outer );
+}
+
+const IDirectInput7AVtbl dinput7_a_vtbl =
+{
+ /*** IUnknown methods ***/
+ dinput7_a_QueryInterface,
+ dinput7_a_AddRef,
+ dinput7_a_Release,
+ /*** IDirectInputA methods ***/
+ dinput7_a_CreateDevice,
+ dinput7_a_EnumDevices,
+ dinput7_a_GetDeviceStatus,
+ dinput7_a_RunControlPanel,
+ dinput7_a_Initialize,
+ /*** IDirectInput2A methods ***/
+ dinput7_a_FindDevice,
+ /*** IDirectInput7A methods ***/
+ dinput7_a_CreateDeviceEx,
+};
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
index 1591779544a..85de9f79b81 100644
--- a/dlls/dinput/dinput_main.c
+++ b/dlls/dinput/dinput_main.c
@@ -55,16 +55,10 @@
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
-static const IDirectInput7AVtbl ddi7avt;
static const IDirectInput7WVtbl ddi7wvt;
static const IDirectInput8WVtbl ddi8wvt;
static const IDirectInputJoyConfig8Vtbl JoyConfig8vt;
-static inline IDirectInputImpl *impl_from_IDirectInput7A( IDirectInput7A *iface )
-{
- return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7A_iface );
-}
-
static inline IDirectInputImpl *impl_from_IDirectInput7W( IDirectInput7W *iface )
{
return CONTAINING_RECORD( iface, IDirectInputImpl, IDirectInput7W_iface );
@@ -136,7 +130,7 @@ static HRESULT create_directinput_instance(REFIID riid, LPVOID *ppDI, IDirectInp
if (!This)
return E_OUTOFMEMORY;
- This->IDirectInput7A_iface.lpVtbl = &ddi7avt;
+ This->IDirectInput7A_iface.lpVtbl = &dinput7_a_vtbl;
This->IDirectInput7W_iface.lpVtbl = &ddi7wvt;
This->IDirectInput8A_iface.lpVtbl = &dinput8_a_vtbl;
This->IDirectInput8W_iface.lpVtbl = &ddi8wvt;
@@ -361,47 +355,6 @@ __ASM_GLOBAL_FUNC( enum_callback_wrapper,
#define enum_callback_wrapper(callback, instance, ref) (callback)((instance), (ref))
#endif
-/******************************************************************************
- * IDirectInputA_EnumDevices
- */
-static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
- LPDIRECTINPUT7A iface, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback,
- LPVOID pvRef, DWORD dwFlags)
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A(iface);
- DIDEVICEINSTANCEA devInstance;
- unsigned int i;
- int j;
- HRESULT r;
-
- TRACE("(this=%p,0x%04x '%s',%p,%p,0x%04x)\n",
- This, dwDevType, _dump_DIDEVTYPE_value(dwDevType, This->dwVersion),
- lpCallback, pvRef, dwFlags);
- _dump_EnumDevices_dwFlags(dwFlags);
-
- if (!lpCallback ||
- dwFlags & ~(DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK | DIEDFL_INCLUDEALIASES | DIEDFL_INCLUDEPHANTOMS | DIEDFL_INCLUDEHIDDEN) ||
- (dwDevType > DI8DEVCLASS_GAMECTRL && dwDevType < DI8DEVTYPE_DEVICE) || dwDevType > DI8DEVTYPE_SUPPLEMENTAL)
- return DIERR_INVALIDPARAM;
-
- if (!This->initialized)
- return DIERR_NOTINITIALIZED;
-
- for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) {
- if (!dinput_devices[i]->enum_deviceA) continue;
-
- TRACE(" Checking device %u ('%s')\n", i, dinput_devices[i]->name);
- for (j = 0, r = S_OK; SUCCEEDED(r); j++) {
- devInstance.dwSize = sizeof(devInstance);
- r = dinput_devices[i]->enum_deviceA(dwDevType, dwFlags, &devInstance, This->dwVersion, j);
- if (r == S_OK)
- if (enum_callback_wrapper(lpCallback, &devInstance, pvRef) == DIENUM_STOP)
- return S_OK;
- }
- }
-
- return S_OK;
-}
/******************************************************************************
* IDirectInputW_EnumDevices
*/
@@ -452,12 +405,6 @@ static ULONG WINAPI IDirectInputWImpl_AddRef( IDirectInput7W *iface )
return ref;
}
-static ULONG WINAPI IDirectInputAImpl_AddRef( IDirectInput7A *iface )
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
- return IDirectInput_AddRef( &This->IDirectInput7W_iface );
-}
-
static ULONG WINAPI IDirectInputWImpl_Release( IDirectInput7W *iface )
{
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
@@ -474,12 +421,6 @@ static ULONG WINAPI IDirectInputWImpl_Release( IDirectInput7W *iface )
return ref;
}
-static ULONG WINAPI IDirectInputAImpl_Release( IDirectInput7A *iface )
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
- return IDirectInput_Release( &This->IDirectInput7W_iface );
-}
-
static HRESULT WINAPI IDirectInputWImpl_QueryInterface( IDirectInput7W *iface, REFIID riid, LPVOID *ppobj )
{
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
@@ -525,12 +466,6 @@ static HRESULT WINAPI IDirectInputWImpl_QueryInterface( IDirectInput7W *iface, R
return E_NOINTERFACE;
}
-static HRESULT WINAPI IDirectInputAImpl_QueryInterface( IDirectInput7A *iface, REFIID riid, LPVOID *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)
{
IDirectInputDeviceImpl *dev;
@@ -655,12 +590,6 @@ static HRESULT WINAPI IDirectInputWImpl_Initialize( IDirectInput7W *iface, HINST
return initialize_directinput_instance(This, version);
}
-static HRESULT WINAPI IDirectInputAImpl_Initialize( IDirectInput7A *iface, HINSTANCE hinst, DWORD version )
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
- return IDirectInput_Initialize( &This->IDirectInput7W_iface, hinst, version );
-}
-
static HRESULT WINAPI IDirectInputWImpl_GetDeviceStatus( IDirectInput7W *iface, REFGUID rguid )
{
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
@@ -681,12 +610,6 @@ static HRESULT WINAPI IDirectInputWImpl_GetDeviceStatus( IDirectInput7W *iface,
return DI_OK;
}
-static HRESULT WINAPI IDirectInputAImpl_GetDeviceStatus( IDirectInput7A *iface, REFGUID rguid )
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
- return IDirectInput_GetDeviceStatus( &This->IDirectInput7W_iface, rguid );
-}
-
static HRESULT WINAPI IDirectInputWImpl_RunControlPanel( IDirectInput7W *iface, HWND hwndOwner, DWORD dwFlags )
{
IDirectInputImpl *This = impl_from_IDirectInput7W( iface );
@@ -711,22 +634,6 @@ static HRESULT WINAPI IDirectInputWImpl_RunControlPanel( IDirectInput7W *iface,
return DI_OK;
}
-static HRESULT WINAPI IDirectInputAImpl_RunControlPanel( IDirectInput7A *iface, HWND hwndOwner, DWORD dwFlags )
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
- return IDirectInput_RunControlPanel( &This->IDirectInput7W_iface, hwndOwner, dwFlags );
-}
-
-static HRESULT WINAPI IDirectInput2AImpl_FindDevice(LPDIRECTINPUT7A iface, REFGUID rguid,
- LPCSTR pszName, LPGUID pguidInstance)
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
-
- FIXME( "(%p)->(%s, %s, %p): stub\n", This, debugstr_guid(rguid), pszName, pguidInstance );
-
- return DI_OK;
-}
-
static HRESULT WINAPI IDirectInput2WImpl_FindDevice(LPDIRECTINPUT7W iface, REFGUID rguid,
LPCWSTR pszName, LPGUID pguidInstance)
{
@@ -764,16 +671,6 @@ static HRESULT create_device(IDirectInputImpl *This, REFGUID rguid, REFIID riid,
return DIERR_DEVICENOTREG;
}
-static HRESULT WINAPI IDirectInput7AImpl_CreateDeviceEx(LPDIRECTINPUT7A iface, REFGUID rguid,
- REFIID riid, LPVOID* pvOut, LPUNKNOWN lpUnknownOuter)
-{
- IDirectInputImpl *This = impl_from_IDirectInput7A( iface );
-
- TRACE("(%p)->(%s, %s, %p, %p)\n", This, debugstr_guid(rguid), debugstr_guid(riid), pvOut, lpUnknownOuter);
-
- return create_device(This, rguid, riid, pvOut, FALSE);
-}
-
static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, REFGUID rguid,
REFIID riid, LPVOID* pvOut, LPUNKNOWN lpUnknownOuter)
{
@@ -784,12 +681,6 @@ static HRESULT WINAPI IDirectInput7WImpl_CreateDeviceEx(LPDIRECTINPUT7W iface, R
return create_device(This, rguid, riid, pvOut, TRUE);
}
-static HRESULT WINAPI IDirectInputAImpl_CreateDevice(LPDIRECTINPUT7A iface, REFGUID rguid,
- LPDIRECTINPUTDEVICEA* pdev, LPUNKNOWN punk)
-{
- return IDirectInput7_CreateDeviceEx( iface, rguid, NULL, (LPVOID *)pdev, punk );
-}
-
static HRESULT WINAPI IDirectInputWImpl_CreateDevice(LPDIRECTINPUT7W iface, REFGUID rguid,
LPDIRECTINPUTDEVICEW* pdev, LPUNKNOWN punk)
{
@@ -1175,19 +1066,6 @@ static HRESULT WINAPI JoyConfig8Impl_OpenAppStatusKey(IDirectInputJoyConfig8 *if
return E_NOTIMPL;
}
-static const IDirectInput7AVtbl ddi7avt = {
- IDirectInputAImpl_QueryInterface,
- IDirectInputAImpl_AddRef,
- IDirectInputAImpl_Release,
- IDirectInputAImpl_CreateDevice,
- IDirectInputAImpl_EnumDevices,
- IDirectInputAImpl_GetDeviceStatus,
- IDirectInputAImpl_RunControlPanel,
- IDirectInputAImpl_Initialize,
- IDirectInput2AImpl_FindDevice,
- IDirectInput7AImpl_CreateDeviceEx
-};
-
static const IDirectInput7WVtbl ddi7wvt = {
IDirectInputWImpl_QueryInterface,
IDirectInputWImpl_AddRef,
diff --git a/dlls/dinput/dinput_private.h b/dlls/dinput/dinput_private.h
index a8087195f96..256c30d3dc0 100644
--- a/dlls/dinput/dinput_private.h
+++ b/dlls/dinput/dinput_private.h
@@ -49,6 +49,7 @@ struct IDirectInputImpl
struct list device_players; /* device instance guid to player name */
};
+extern const IDirectInput7AVtbl dinput7_a_vtbl DECLSPEC_HIDDEN;
extern const IDirectInput8AVtbl dinput8_a_vtbl DECLSPEC_HIDDEN;
/* Function called by all devices that Wine supports */
--
2.31.0
More information about the wine-devel
mailing list