実現したいこと
エラーを解決してコントローラを使えるようにしたいです。
発生している問題・分からないこと
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>
XInput.h
1/*************************************************************************** 2* * 3* XInput.h -- This module defines XBOX controller APIs * 4* and constansts for the Windows platform. * 5* * 6* Copyright (c) Microsoft Corp. All rights reserved. * 7* * 8***************************************************************************/ 9#ifndef _XINPUT_H_ 10#define _XINPUT_H_ 11 12#include <windef.h> 13 14// 15// XInput APIs 16// 17#ifdef __cplusplus 18extern "C" { 19#endif 20 21DWORD WINAPI XInputGetState 22( 23 __in DWORD dwUserIndex, // Index of the gamer associated with the device 24 __out XINPUT_STATE* pState // Receives the current state 25); 26 27DWORD WINAPI XInputSetState 28( 29 __in DWORD dwUserIndex, // Index of the gamer associated with the device 30 __in XINPUT_VIBRATION* pVibration // The vibration information to send to the controller 31); 32 33DWORD WINAPI XInputGetCapabilities 34( 35 __in DWORD dwUserIndex, // Index of the gamer associated with the device 36 __in DWORD dwFlags, // Input flags that identify the device type 37 __out XINPUT_CAPABILITIES* pCapabilities // Receives the capabilities 38); 39 40void WINAPI XInputEnable 41( 42 __in BOOL enable // [in] Indicates whether xinput is enabled or disabled. 43); 44
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
プロジェクトのリンカー設定を確認しました。
XIunpt.libがあるパスになっています。
<XInput.h>をインクルードしています。
別プロジェクトで動いたので今回のプロジェクトにコピーしました。
補足
visual studio 2022
DirectX SDK(June 2010)
回答2件
あなたの回答
tips
プレビュー