J'essaie de créer un système de particules rendu GPU, et il utilise cette classe d'entrée pour gérer l'entrée souris/clavier.DX11 DirectInput8Create provoquant l'erreur LNK2019
Le problème est la ligne;
HRESULT result = DirectInput8Create(.....);
provoque une erreur de symbole externe LNK2019: non résolue. J'ai inclus les fichiers nécessaires, donc je ne sais pas pourquoi cela se produit. Ci-dessous sont respectivement les fichiers Input.h
et .
fichier INPUT.H
#ifndef _INPUT_
#define _INPUT_
#include <stdafx.h>
#include <dinput.h>
class Input{
private:
IDirectInputDevice8* _DIKeyboard;
IDirectInputDevice8* _DIMouse;
LPDIRECTINPUT8 _directInput;
LONG _mouseXabsolute, _mouseYabsolute, _mouseZabsolute;
LONG _mouseXrelative, _mouseYrelative, _mouseZrelative;
BYTE _keyboardState[256];
BYTE _leftMouseButton, _rightMouseButton;
int _screenWidth, _screenHeight;
HWND _hWnd;
POINT _point;
RECT _rect;
public:
Input();
~Input();
void unload();
bool initializeInput(HINSTANCE hInstance, HWND hWnd, int screenWidth, int screenHeight);
void updateInput();
BYTE* getKeyboardState();
LONG getMouseXRelative();
LONG getMouseYRelative();
LONG getMouseZRelative();
LONG getMouseXAbsolute();
LONG getMouseYAbsolute();
LONG getMouseZAbsolute();
BYTE getLeftMouseClick();
BYTE getRightMouseClick();
};
#endif
INPUT.CPP
Fichier
#include <stdafx.h>
#include <Input.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
using namespace std;
Input::Input() : _DIKeyboard(), _DIMouse(), _directInput(), _point(), _rect(){
_mouseXabsolute = _mouseYabsolute = 0;
_mouseZabsolute = 1;
_mouseXrelative = _mouseXrelative = _mouseXrelative = 0;
}
Input::~Input(){
unload();
}
void Input::unload(){
if (_DIKeyboard) _DIKeyboard->Release();
if (_DIMouse) _DIMouse->Release();
if (_directInput) _directInput->Release();
}
bool Input::initializeInput(HINSTANCE hInstance, HWND hWnd, int screenWidth, int screenHeight){
_screenWidth = screenWidth;
_screenHeight = screenHeight;
_hWnd = hWnd;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////Create direct input, keyboard and mouse devices///////////////////////////////////////////////////
HRESULT result = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&_directInput, NULL);
if (FAILED(result)){
MessageBox(0, L"Could not create direct input!", L"Error", MB_OK);
return false;
}
...
...
...
}
Je vous remercie de toute aide pour résoudre ce problème.
Il est une erreur de liaison de sorte que votre .h et .cpp les fichiers ne sont pas pertinents. Vous avez simplement oublié de lier la bibliothèque d'importation, dinput8.lib –
Notez que si vous utilisez DirectX 11, il n'est pas nécessaire d'utiliser l'ancien DirectInput. En outre, vous ne devez pas utiliser DirectInput pour la saisie au clavier ou à la souris sur les versions modernes de Windows - il est simplement implémenté au-dessus des messages Win32. Voir [Kit d'outils DirectX: Maintenant avec GamePads] (https://blogs.msdn.microsoft.com/chuckw/2014/09/05/directx-tool-kit-now-with-gamepads/) et [Kit d'outils DirectX: Prise en charge du clavier et de la souris] (https://blogs.msdn.microsoft.com/chuckw/2015/08/06/directx-tool-kit-keyboard-and-mouse-support/). –