| Uint16 | version | SDL_VIRTUAL_JOYSTICK_DESC_VERSION |
| Uint16 | type | SDL_JoystickType |
| Uint16 | naxes | ジョイスティックの軸の数 |
| Uint16 | nbuttons | ジョイスティックのボタンの数 |
| Uint16 | nhats | ジョイスティックのハットの数 |
| Uint16 | vendor_id | ジョイスティックのUSBベンダーID |
| Uint16 | product_id | ジョイスティックの製品ID |
| Uint16 | padding | 未使用 |
| Uint32 | button_mask | 有効なボタンのマスク 例: (1 << SDL_CONTROLLER_BUTTON_A) |
| Uint32 | axis_mask | 有効な軸のマスク 例: (1 << SDL_CONTROLLER_AXIS_LEFTX) |
| const char * | name | ジョイスティックの名前 |
| void * | userdata | コールバックに渡されるユーザデータへのポインタ |
| void (SDLCALL *)(void *userdata) | Update | ジョイスティックの状態を更新する必要があるとき呼ばれる関数へのポインタ |
| void (SDLCALL *)(void *userdata, int player_index) | SetPlayerIndex | プレイヤーの順序が設定されたとき呼ばれる関数へのポインタ |
| int (SDLCALL *)(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) | Rumble | SDL_JoystickRumble()の実装へのポインタ |
| int (SDLCALL *)(void *userdata, Uint16 left_rumble, Uint16 right_rumble) | RumbleTriggers | SDL_JoystickRumbleTriggers()の実装へのポインタ |
| int (SDLCALL *)(void *userdata, Uint8 red, Uint8 green, Uint8 blue) | SetLED | SDL_JoystickSetLED()の実装へのポインタ |
| int (SDLCALL *)(void *userdata, const void *data, int size) | SendEffect | SDL_JoystickSendEffect()の実装へのポインタ |
呼び出し側は構造体を0で初期化し, SDL_JoystickAttachVirtualEx()を呼ぶ前にversionにSDL_VIRTUAL_JOYSTICK_DESC_VERSIONを設定する必要がある. 構造体の各項目は任意で, 0のままにすることができる.