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;
}

__in & __out を取得すると、このスコープ エラーで宣言されませんでした。

以下の構文を使用しました g++ Joypad.cpp -IC:\DirectSDK\Include -LC:\DirectSDK\Lib\x86 -lXinput -o Joypad

g++ Joypad.cpp -IC:\Windows SDK~um,shared, etc -LC:\Windows SDK\Lib -lXInput -o Joypad も試しました

見逃したものはありますか?私はmingw x86_64を使用しています

含まれるディレクトリ: Windows キット 8.1 (um,shared,winrt) Microsoft DirectX SDK

含まれるライブラリ: XInput.lib - C:\Progra~2\Micros~4\Lib\x86

4

1 に答える 1

0

__in__outは Microsoft 固有のSAL注釈 です。これらは、MS Visual Studio C++ コンパイラによって理解されますが、GCC コンパイラでは理解されません。

それらを「削除」する方法は、たとえば、自分でヘッダーファイルを作成しno_sal.h、GCC コンパイルが SAL 注釈で barfs するたびに__foo、次を追加することです。

#define __foo

no_sal.h。次に、オプションno_sal.hを渡すことにより、すべてのコンパイルで が最初に含まれていることを確認します。g++-include /path/to/no_sal.h

ただし、GCC を使用した DirectX SDK のような非常に「深い Microsoft」コードをコンパイルしようとする際の問題は、これで解決するとは思いません。Visual Studio を使用したくない場合は、Windows GCC ディストリビューションを MinGW (推測) から、GCC 用の DirectX ヘッダーとライブラリをバンドルするTDM GCC 64-bitに切り替えることを検討してください。

于 2016-03-19T19:40:36.220 に答える