#include <Windows.h>
#include <XInput.h>
#include <iostream>
using namespace std;
struct Controller{
XINPUT_STATE state;
};
class Joypad
{
public:
int getJoystickPort()
{
DWORD dwResult;
for (DWORD i = 0; i < XUSER_MAX_COUNT; i++)
{
XINPUT_STATE state;
ZeroMemory(&state, sizeof(XINPUT_STATE));
// Simply get the state of the controller from XInput.
dwResult = XInputGetState(i, &state);
if (dwResult == ERROR_SUCCESS)
{
return((int) i);
cout << "Joystick Port: " << i << " is connnected." << endl;
cout << "Button " << (((int)state.Gamepad.wButtons == XINPUT_GAMEPAD_A)) << " pressed." << endl;
cout << "LX: " << state.Gamepad.sThumbLX << " LY: " << state.Gamepad.sThumbLY << endl;
cout << "RX: " << state.Gamepad.sThumbRX << " RY: " << state.Gamepad.sThumbRY << endl;
}
else
{
cout << "Joystick at Port: " << i << " is disconnected." << endl;
}
}
return -1;
}
};void joystickStates(){
Joypad* joypad = new Joypad;
while (true){
system("cls");
joypad->getJoystickPort();
Sleep(1000);
}
}
int main(){
joystickStates();
return 0;
}
я получаю __in & __out не было объявлено в этой области ошибок.
Я использовал следующий синтаксис g ++ Joypad.cpp -IC: \ DirectSDK \ Include -LC: \ DirectSDK \ Lib \ x86 -lXinput -o Joypad
и я тоже пытался
g ++ Joypad.cpp -IC: \ Windows SDK ~, общий доступ и т.д. -LC: \ Windows SDK \ Lib -lXInput -o Joypad
Я что-то пропустил? Я использую mingw x86_64
Каталоги включены:
Windows Kits 8.1 (ит, общий, winrt)
Microsoft DirectX SDKВключенные библиотеки: XInput.lib — C: \ Progra ~ 2 \ Micros ~ 4 \ Lib \ x86
__in
а также __out
специфичны для Microsoft SAL
аннотаций. Они понимаются компилятором MS Visual Studio C ++, но не компилятором GCC.
Способ «удалить» их можно сделать из файла заголовка, скажем, no_sal.h
а также
каждый раз, когда ваша компиляция GCC прерывается на аннотации SAL __foo
, добавлять:
#define __foo
в no_sal.h
, Затем убедитесь, что no_sal.h
включается первым в каждой компиляции
мимоходом g++
опция -include /path/to/no_sal.h
,
Тем не менее, я не ожидаю, что это будет конец ваших проблем в попытке
скомпилировать такой очень «глубоко Microsoft» код, как DirectX SDK с GCC. если ты
не хотите использовать Visual Studio, подумайте о переключении Windows GCC
распределение от MinGW (я думаю) TDM GCC 64-битный,
который связывает заголовки DirectX и библиотеки для GCC.
Других решений пока нет …