Интерфейс 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), что не приемлемо для моего джойстика.


Ответы (0 шт):