我想通過.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;
}
您是否嘗試將include路徑添加到編譯器的命令行? – kmdv
經過一番搜索之後,我發現我添加了頭文件,所以我做了一些#define __inout MS東西--I「D:\ SDKs \ DirectX \ Include」和-I「D:\ SDKs \ DirectX \ Lib」 ,它似乎現在找到這些文件,但它會拋出像「未定義的XInputSetState @ 8引用」等錯誤... – user780756
包含系統頭文件時,首選'-isystem'。這將從代碼中移除不想修改的不需要的警告。 – kmdv