我正在尝试创建一个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;
    }
...
...
...
}


感谢您为解决此问题提供的帮助。

最佳答案

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

#pragma comment(lib, "dinput8")


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

关于c++ - DX11 DirectInput8Create导致LNK2019错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42493174/

10-10 21:36