Интерфейс DirectInput не изменяет данные об осях и кнопках, в осях стоит постоянное число
Предисловие
Сразу скажу что в системе стоят последние драйвера и через Панель управления Windows 10 прекрасно определила все 4 оси (X Y Z Rz) и 12 кнопок (Джойстик Sven X-PAD). Для первого ознакомления сделал простое окно на win32 c текстом по середине. После вызова показа окна функцией ShowWindow(hwnd, nCmdShow);, вызывается инициализация интерфейса DirectInput'a функцией DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&iDirectInput, nullptr);. Указатель на объект я объявил в начале файла IDirectInput8* iDirectInput;. Дальше начинаю перечислять весь список джойстиков методом
iDirectInput->EnumDevices(DI8DEVCLASS_GAMECTRL, ForEachJoysticks, hwnd, DIEDFL_ATTACHEDONLY);.
Вот так выглядит функция обратного вызова:
BOOL CALLBACK ForEachJoysticks(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef)
{
/*
joy тоже был объявлен в начале файла как указатель на IDirectInputDevice8
*/
iDirectInput->CreateDevice(lpddi->guidInstance, &joy, NULL); // Инициализация джойстика с GUID
//joy->SetCooperativeLevel((HWND)pvRef, DISCL_BACKGROUND);
joy->SetDataFormat(&c_dfDIJoystick);
joy->Acquire();
DIJOYSTATE lol;
HRESULT foo = joy->GetDeviceState(sizeof(lol), &lol); // Все прошло удачно и вернулось DI_OK
if (foo != DI_OK) {
OutputDebugString(L"Failed to get state\n");
}
return DIENUM_STOP; // Прекращаем перечисление, мне бы сначала с одним разобраться :D
}
Вот тут и начинаются странности, что-бы проверить написанное мной код на прочность я поставил brakepoint перед return и заметил странные вещи.
В просмотре переменных VS2019 все четыре оси long lol->IX, IY, IZ, IRz имеют одно общее число 32767.
Я попробовал отклонить один стик наверх - ничего не поменялось.
Дальше я попробовал нажать одну кнопку и проверить массив кнопок на изменяемость, эффект такой-же как и у осей - ничего.
Прошу помощи у сообщества, чем мог начаться данный баг, если кому-то нужен полный код могу предоставить.
Спасибо что дочитали!
P.S. Я также проверял на руле все это, результат тот же самый
P.P.S Я хотел добавить максимальную поддержку, знаю что есть современный xinput, но ради практики решил попробовать устаревший интерфейс, а так же xinput имеет ограничения по кнопкам (10), что не приемлемо для моего джойстика.