DX11 DirectInput8Create导致LNK2019错误

时间:2017-02-27 18:27:43

标签: c++ directx directx-11 unresolved-external directinput

我正在尝试创建一个GPU渲染粒子系统,它使用此输入类来处理鼠标/键盘输入。

问题在于行;

HRESULT result = DirectInput8Create(.....);

导致LNK2019:未解析的外部符号错误。我已经包含了必要的文件,所以我不确定为什么会这样。以下分别是Input.hInput.cpp文件。

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档案

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

我很感激有任何帮助来解决这个问题。

1 个答案:

答案 0 :(得分:1)

你应该链接到dinput8.lib静态库:

#pragma comment(lib, "dinput8")

此外,您应该考虑使用Raw输入API而不是DirectInput:https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536(v=vs.85).aspx