DirectInput has a limit of 32 buttons, 8 axes, and 4 hat switches per controller ID, with up to 16 IDs.
That is not entirely true:
The button states are actually bitfields; if button 1 is pressed, the bitfield indicated by JOY_BUTTON1 is set, and so on up to JOY_BUTTON32. If your joystick has more than 32 buttons (!), you can use the dwButtonNumber to see if a particular button is pressed. Since this field is not a bitfield, you cannot check for multiple buttons pressed above button number 32. For the point of view hat, use the values shown in Figure 13.
http://www.microsoft.com/msj/archive/S241.aspxThis is a very old quote, but I believe this has not changed between DX versions.
As I understand it, DirectX does allow for more than 32 buttons, but the software needs to provide for it specifically.
As I wrote, I've read mentions of some joystick mappers doing just that (M16 was one, if I remember correctly), but I cannot find a working download anywhere.