2012-09-01 6 views
0

이 main.cpp 파일을 .bat 파일을 통해 MinGW가있는 DLL로 컴파일하려고합니다. Windows가 아닌 Linux btw입니다. ": \ CPP의 \ 출력 \의 main.dll D"MinGW에서 XInput.h 헤더를 찾을 수 없습니다.

하지만 컴파일러가 계속 g는 ++ "srcdll이 MAIN.CPP는 \"-O3 -DNDEBUG -s -shared -o는 \

compile.bat 와 Mingw \ bin에 그것은 XInput.h를 찾을 수 없다는 것을 말합니다. DirectX SDK도 설치되어 있으며 include 및 lib 디렉토리는 PATH 환경 변수에 있습니다.

MAIN.CPP commande 라인

  • 오류 (정의 참조)에

    #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

    컴파일러의 명령 줄에 포함 경로를 추가 했습니까? 일부 검색 후 – kmdv

    +0

    헤더 파일을 추가 했으므로 -I "D : \ SDKs \ DirectX \ Include"및 -I "D : \ SDKs \ DirectX \ Lib"과 함께 #define __inout MS stuff , 그것은 지금 파일을 찾은 것 같지만 "XInputSetState @ 8"에 대한 정의되지 않은 참조와 같은 오류가 발생합니다 ... – user780756

    +0

    시스템 헤더를 포함 할 때'-isystem'을 선호합니다. 이렇게하면 어쨌든 수정하지 않을 코드에서 원하지 않는 경고가 제거됩니다. – kmdv

    답변

    1
    1. 추가 헤더 경로 링크 온. 링크 줄에 .a/.o 경로를 추가해야합니다.
    +0

    a./.o에 링크를 어떻게 추가합니까? – user780756

    +1

    줄 시작 부분에 -Lfolder/subfolder argmuent와 함께 경로를 추가 할 수 있습니다. 또한 줄 끝에 .o (data \ lib \ xxx.a) 경로를 쓸 수 있습니다. – Taiki

    관련 문제