So I've traced the problem to this line:
@fXIGetDSoundAudioDeviceGUIDS:=getProcAddress(fXIn putHandle,'XInputGetDSoundAudioDeviceGuids');
The problem is that this will return nil and therefore the procedure TXInputInterface.initialise will return false. So I've removed all references to fXIGetDSoundAudioDeviceGuids in the unit and now it's working fine for buttons press detection.