2016-03-19 16 views
0
#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; 
} 

Im Erhalten der __in & __out 's wurde in diesem Bereich Fehler nicht deklariert.C++ XInput Kompilierung mit g ++

verwendete ich die Syntax unten g ++ Joypad.cpp -IC: \ DirectSDK \ Include -LC: \ DirectSDK \ Lib \ x86 -lXinput -o Joypad

und ich versuchte auch g ++ Joypad.cpp -IC: \ Windows SDK ~ um, shared, etc -LC: \ Windows SDK \ Lib -lXInput -o Joypad

Gibt es etwas, das ich verpasst habe? Ich benutze mingw x86_64

Verzeichnisse enthalten: Windows-Kits 8.1 (um, gemeinsam, WinRT) Microsoft DirectX SDK

Bibliotheken enthalten: XInput.lib - C: \ Progra ~ 2 \ Micros ~ 4 \ lib \ x86

+0

Fehler ist bei http://pastebin.com/mJen909T –

Antwort

0

Die __in und __out sind Microsoft-spezifische SAL Anmerkungen. Sie werden von dem MS Visual Studio C++ - Compiler aber nicht von dem GCC-Compiler verstanden.

Ein Weg zu "löschen", um sie selbst eine Header-Datei zu machen wäre, sagen, no_sal.h und jedes Mal, wenn Ihre GCC Compilation barfs auf einer SAL Anmerkung __foo hinzufügen:

#define __foo 

zu no_sal.h. Stellen Sie dann sicher, dass no_sal.h zuerst in jeder Kompilation enthalten ist, indem Sie g++ die Option -include /path/to/no_sal.h übergeben.

Allerdings würde ich nicht erwarten, dass dies das Ende Ihrer Probleme bei dem Versuch kompilieren so sehr "tief Microsoft" -Code wie das DirectX-SDK mit GCC. Wenn Sie nicht Visual Studio verwenden möchten, dann erwägen Sie, Ihre Windows GCC Verteilung von MinGW (ich denke) zu TDM GCC 64-bit, , die DirectX-Header und Bibliotheken für GCC bündelt.

+0

Vielen Dank Sir es erfolgreich kompiliert .. aber scheint nicht zu arbeiten, wie ich dachte, es würde. Ich benutzte x360ce, um meinen generischen Zwilling usb zu stützen, es funktionierte nicht, es erkennt es nicht. übrigens, dieses Programm funktioniert gut, wenn ich Visual Studio verwenden, um es zu kompilieren und x360ce verwenden, um mein Joypad zu erkennen. –

+0

Danke Sir. Ich habe es jetzt funktioniert. DANKE VIELMALS! –