2012-09-01 60 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