On Fri, Jul 29, 2011 at 05:48:43PM -0300, Lucas Zawacki wrote: > Hello! > > Here's a lot of patches with a ConfigureDevices implementation. These > patches can be tested with this app I built that uses ConfigureDevices > to set up a joystick action mapping > (https://github.com/downloads/lfzawacki/dinput-samples/dolphin-plugin.exe) > . I also tested it with the Rally Trophy and Star Sonata games. > > Any advice on the dialog code is appreciated, it's the first time I've > coded something like this and may have missed some things. > > This implementation still lacks some things: > > * Implement username property for devices > * Tracking down a bug with Rally Trophy that makes the mouse disappear > while inside the ConfigureDevices dialog. > * Implement the "Sort Assigned" checkbox > * Some fixes to the code > > I'll let the code resting here while I keep working on this stuff.
If this is to some degree functional it can also be included already :) One thing in 0001: > + /* Copy action names */ > + for (i=0; i < diafW.dwNumActions; i++) > + { > + const char* from = > lpdiCDParams->lprgFormats->rgoAction[i].u.lptszActionName; > + WCHAR *to = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*MAX_PATH); > + MultiByteToWideChar(CP_ACP, 0, from , -1, to , MAX_PATH); > + diafW.rgoAction[i].u.lptszActionName = to; > + } The pattern to do this is usually by querying MBtoWC for the result length and then allocating and doing it for real (untested): const char* from = lpdiCDParams->lprgFormats->rgoAction[i].u.lptszActionName; WCHAR *to; DWORD len; len = MultiByteToWideChar(CP_ACP, 0, from , -1, NULL , 0); to = HeapAlloc(GetProcessHeap(),0,len*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, from , -1, to, len); diafW.rgoAction[i].u.lptszActionName = to; > + hr = IDirectInput8WImpl_ConfigureDevices(&This->IDirectInput8W_iface, > lpdiCallback, &diCDParamsW, dwFlags, pvRefData); Should the action format be copied back on error? > + /* Copy back configuration */ > + _copy_diactionformatWtoA(lpdiCDParams->lprgFormats, &diafW); > + > + /* Free memory */ > + for (i=0; i < diafW.dwNumActions; i++) > + HeapFree(GetProcessHeap(), 0, (LPVOID) > diafW.rgoAction[i].u.lptszActionName); > + > + HeapFree(GetProcessHeap(), 0, diafW.rgoAction); > > - FIXME("(this=%p,%p,%p,%04x,%p): stub\n", This, lpdiCallback, > lpdiCDParams, > - dwFlags, pvRefData); > - return 0; > + return hr; I also read over the dialog stuff ... I did not see anything problematic, looked to my untrained eyes :) Ciao, Marcus