@@ -91,12 +91,7 @@ HRESULT m_IDirectInput8::EnumDevicesT(DWORD dwDevType, V lpCallback, LPVOID pvRe
9191{
9292 Logging::LogDebug () << __FUNCTION__ << " (" << this << " )" ;
9393
94- if (!lpCallback)
95- {
96- return DIERR_INVALIDPARAM;
97- }
98-
99- if (Config.DeviceLookupCacheTime )
94+ if (Config.DeviceLookupCacheTime && lpCallback)
10095 {
10196 auto now = std::chrono::steady_clock::now ();
10297 auto & cachedData = GetEnumCache (GetProxyInterface<T>());
@@ -203,34 +198,34 @@ HRESULT m_IDirectInput8::EnumDevicesBySemanticsT(V ptszUserName, W lpdiActionFor
203198{
204199 Logging::LogDebug () << __FUNCTION__ << " (" << this << " )" ;
205200
206- if (! lpCallback)
201+ if (lpCallback)
207202 {
208- return DIERR_INVALIDPARAM;
209- }
210-
211- struct EnumDevice
212- {
213- LPVOID pvRef = nullptr ;
214- X lpCallback = nullptr ;
215- GUID WrapperDeviceID = {};
216-
217- static BOOL CALLBACK EnumDeviceCallback (C lpddi, D lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef)
203+ struct EnumDevice
218204 {
219- EnumDevice *self = (EnumDevice*)pvRef;
205+ LPVOID pvRef = nullptr ;
206+ X lpCallback = nullptr ;
207+ GUID WrapperDeviceID = {};
220208
221- if ( lpdid)
209+ static BOOL CALLBACK EnumDeviceCallback (C lpddi, D lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef )
222210 {
223- lpdid = ProxyAddressLookupTableDinput8.FindAddress <m_IDirectInputDevice8>(lpdid, self->WrapperDeviceID );
211+ EnumDevice* self = (EnumDevice*)pvRef;
212+
213+ if (lpdid)
214+ {
215+ lpdid = ProxyAddressLookupTableDinput8.FindAddress <m_IDirectInputDevice8>(lpdid, self->WrapperDeviceID );
216+ }
217+
218+ return self->lpCallback (lpddi, lpdid, dwFlags, dwRemaining, self->pvRef );
224219 }
220+ } CallbackContext;
221+ CallbackContext.pvRef = pvRef;
222+ CallbackContext.lpCallback = lpCallback;
223+ CallbackContext.WrapperDeviceID = WrapperDeviceID;
225224
226- return self->lpCallback (lpddi, lpdid, dwFlags, dwRemaining, self->pvRef );
227- }
228- } CallbackContext;
229- CallbackContext.pvRef = pvRef;
230- CallbackContext.lpCallback = lpCallback;
231- CallbackContext.WrapperDeviceID = WrapperDeviceID;
225+ return GetProxyInterface<T>()->EnumDevicesBySemantics (ptszUserName, lpdiActionFormat, EnumDevice::EnumDeviceCallback, &CallbackContext, dwFlags);
226+ }
232227
233- return GetProxyInterface<T>()->EnumDevicesBySemantics (ptszUserName, lpdiActionFormat, EnumDevice::EnumDeviceCallback, &CallbackContext , dwFlags);
228+ return GetProxyInterface<T>()->EnumDevicesBySemantics (ptszUserName, lpdiActionFormat, lpCallback, pvRef , dwFlags);
234229}
235230
236231template HRESULT m_IDirectInput8::ConfigureDevicesT<IDirectInput8A, LPDICONFIGUREDEVICESPARAMSA>(LPDICONFIGUREDEVICESCALLBACK, LPDICONFIGUREDEVICESPARAMSA, DWORD, LPVOID);
0 commit comments