2012-09-01 62 views
0

我想通过.bat文件将这个main.cpp文件编译成一个带有MinGW的DLL。 我在Windows上,而不是Linux btw。MinGW找不到XInput.h标头

的compile.bat 的mingw \ BIN \克++ “srcdll \ main.cpp中” -O3 -DNDEBUG -s -shared -o “d:\ CPP \输出\ main.dll”

但是编译器保持说它找不到XInput.h。我也安装了DirectX SDK,include和lib目录位于我的PATH环境变量中。

的main.cpp

#include <windows.h> 
#include <XInput.h> 

#define EXPORTREAL extern "C" __declspec(dllexport) double __cdecl 
#define EXPORTSTRING extern "C" __declspec(dllexport) LPSTR __cdecl 

EXPORTREAL setRumble(double index, double left, double right) 
{ 
    XINPUT_VIBRATION vibration; 

    vibration.wLeftMotorSpeed = left; 
    vibration.wRightMotorSpeed = right; 

    XInputSetState(index,&vibration); 

    return index; 
} 

EXPORTREAL leftTrigger(double index) 
{ 
    XINPUT_STATE state; 

    XInputGetState(index,&state); 
    return state.Gamepad.bLeftTrigger; 
} 

EXPORTREAL rightTrigger(double index) 
{ 
    XINPUT_STATE state; 

    XInputGetState(index,&state); 
    return state.Gamepad.bRightTrigger; 
} 

EXPORTREAL leftThumbX(double index) 
{ 
    XINPUT_STATE state; 

    XInputGetState(index,&state); 
    return state.Gamepad.sThumbLX; 
} 

EXPORTREAL leftThumbY(double index) 
{ 
    XINPUT_STATE state; 

    XInputGetState(index,&state); 
    return state.Gamepad.sThumbLY; 
} 

EXPORTREAL rightThumbX(double index) 
{ 
    XINPUT_STATE state; 

    XInputGetState(index,&state); 
    return state.Gamepad.sThumbRX; 
} 

EXPORTREAL rightThumbY(double index) 
{ 
    XINPUT_STATE state; 

    XInputGetState(index,&state); 
    return state.Gamepad.sThumbRY; 
} 

EXPORTREAL getButtonState(double index) 
{ 
    XINPUT_STATE state; 

    XInputGetState(index,&state); 
    return state.Gamepad.wButtons; 
} 

EXPORTREAL checkButton(double index, double button) 
{ 
    WORD buttonWord; 
    XINPUT_STATE state; 

    buttonWord = button; 

    XInputGetState(index,&state); 
    return (state.Gamepad.wButtons & buttonWord) ? 1 : 0; 
} 

EXPORTREAL getCtrlState(double index) 
{ 
    XINPUT_STATE state; 

    return XInputGetState(index,&state); 
} 

BOOL APIENTRY DllMain(HMODULE hModule, 
         DWORD ul_reason_for_call, 
         LPVOID lpReserved 
        ) 
{ 
    XINPUT_VIBRATION vibration; 

    vibration.wLeftMotorSpeed = 0; 
    vibration.wRightMotorSpeed = 0; 

    XInputSetState(0,&vibration); 

    return TRUE; 
} 
+0

您是否尝试将include路径添加到编译器的命令行? – kmdv

+0

经过一番搜索之后,我发现我添加了头文件,所以我做了一些#define __inout MS东西--I“D:\ SDKs \ DirectX \ Include”和-I“D:\ SDKs \ DirectX \ Lib” ,它似乎现在找到这些文件,但它会抛出像“未定义的XInputSetState @ 8引用”等错误... – user780756

+0

包含系统头文件时,首选'-isystem'。这将从代码中移除不想修改的不需要的警告。 – kmdv

回答

1
  1. 添加报头路径COMMANDE线
  2. 误差(未定义参考)来自链接。您应该在链接行中添加路径到.a/.o
+0

如何添加链接到a./.o? – user780756

+1

您可以在该行的开头添加一个具有-Lfolder/subfolder argmuent的路径。您也可以在该行的末尾写入.o(data \ lib \ xxx.a)的路径, – Taiki