実現したいこと
エラーを解決してコントローラを使えるようにしたいです。
発生している問題・分からないこと
XInputが読み込めていないのかXInputGetState、XInputSetState、XInputEnableが使えません。
エラーメッセージ
error
1エラー LNK2019 未解決の外部シンボル XInputGetState が関数 "void __cdecl UpdatePad(void)" (?UpdatePad@@YAXXZ) で参照されました 2エラー LNK2019 未解決の外部シンボル XInputSetState が関数 "void __cdecl UninitPad(void)" (?UninitPad@@YAXXZ) で参照されました 3エラー LNK2019 未解決の外部シンボル XInputEnable が関数 "long __cdecl InitializePad(void)" (?InitializePad@@YAJXZ) で参照されました 4
該当のソースコード
inputx.cpp
1#include "main.h" 2#include "inputx.h" 3 4HRESULT InitializePad(void); // パッド初期化 5void UpdatePad(void); 6void UninitPad(void); 7 8HRESULT InitializePad(void) // パッド初期化 9{ 10 //初期化 11 ZeroMemory(g_Controllers, sizeof(CONTROLER_STATE) * MAX_CONTROLLERS); 12 13 XInputEnable(true); 14 15 return true; 16 17} 18 19//------------------------------------------- 終了処理 20void UninitPad(void) 21{ 22 //パラメータのリセット 23 ZeroMemory(g_Controllers, sizeof(CONTROLER_STATE) * MAX_CONTROLLERS); 24 25 //バイブレーション停止 26 for (DWORD i = 0; i < MAX_CONTROLLERS; i++) 27 XInputSetState(i, &g_Controllers[i].vibration); 28 29 XInputEnable(false); 30} 31 32//------------------------------------------ 更新 33void UpdatePad(void) 34{ 35 for (DWORD i = 0; i < MAX_CONTROLLERS; i++) 36 { 37 XInputSetState(i, &g_Controllers[i].vibration); 38 39 g_Controllers[i].lastState = g_Controllers[i].state; 40 41 //正常:ERROR_SUCCESS 0 42 //接続無し:ERROR_DEVICE_NOT_CONNECTED 1167 43 DWORD result; 44 result = XInputGetState(i, &g_Controllers[i].state); 45 46 //トリガー作成 47 g_Controllers[i].trigger.Gamepad.wButtons = ((g_Controllers[i].lastState.Gamepad.wButtons ^ g_Controllers[i].state.Gamepad.wButtons) & g_Controllers[i].state.Gamepad.wButtons); 48 49 //左スティック情報の作成 50 float LX = g_Controllers[i].state.Gamepad.sThumbLX; 51 float LY = g_Controllers[i].state.Gamepad.sThumbLY; 52 53 float magnitude = sqrtf((LX * LX) + (LY * LY)); 54 55 if (magnitude > 32767) 56 magnitude = 32767; 57 58 magnitude -= DEADZONE; 59 60 if (magnitude <= 0) 61 { 62 g_Controllers[i].state.Gamepad.sThumbLX = 0; 63 g_Controllers[i].state.Gamepad.sThumbLY = 0; 64 } 65 66 if(g_Controllers[i].state.Gamepad.sThumbLX >= 0) 67 g_LeftStickX[i] = (float)g_Controllers[i].state.Gamepad.sThumbLX / 32767; 68 else 69 g_LeftStickX[i] = (float)g_Controllers[i].state.Gamepad.sThumbLX / 32768; 70 71 if (g_Controllers[i].state.Gamepad.sThumbLY >= 0) 72 g_LeftStickY[i] = (float)g_Controllers[i].state.Gamepad.sThumbLY / 32767; 73 else 74 g_LeftStickY[i] = (float)g_Controllers[i].state.Gamepad.sThumbLY / 32768; 75 76 //右スティック情報の作成 77 float RX = g_Controllers[i].state.Gamepad.sThumbRX; 78 float RY = g_Controllers[i].state.Gamepad.sThumbRY; 79 80 magnitude = sqrtf((RX * RX) + (RY * RY)); 81 82 if (magnitude > 32767) 83 magnitude = 32767; 84 85 magnitude -= DEADZONE; 86 87 if (magnitude <= 0) 88 { 89 g_Controllers[i].state.Gamepad.sThumbRX = 0; 90 g_Controllers[i].state.Gamepad.sThumbRY = 0; 91 } 92 93 if (g_Controllers[i].state.Gamepad.sThumbRX >= 0) 94 g_RightStickX[i] = (float)g_Controllers[i].state.Gamepad.sThumbRX / 32767; 95 else 96 g_RightStickX[i] = (float)g_Controllers[i].state.Gamepad.sThumbRX / 32768; 97 98 if (g_Controllers[i].state.Gamepad.sThumbLY >= 0) 99 g_RightStickY[i] = (float)g_Controllers[i].state.Gamepad.sThumbRY / 32767; 100 else 101 g_RightStickY[i] = (float)g_Controllers[i].state.Gamepad.sThumbRY / 32768; 102 } 103}
inputx.h
1#pragma once 2 3#include <XInput.h>
試したこと・調べたこと
上記の詳細・結果
プロジェクトのリンカー設定を確認しました。
XIunpt.libがあるパスになっています。
<XInput.h>をインクルードしています。
補足
visual studio 2022
DirectX SDK(June 2010)

0 コメント