Проблемы с связыванием: Qt5.5 32bit VS2013

Я искал ответ на этот вопрос, но пока не повезло.

Использование Qt5.5 32-бит, VS2013 на 64-битной Win8

Мой файл .pro содержит это:

INCLUDEPATH += "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include"
LIBS += -L"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -ladvapi32

Я проверил обе папки, и WinUser.h находится в Include, а User32.lib присутствует в Lib.

У меня есть следующие две функции в моем коде:

void suppressAnimations()
{
    ANIMATIONINFO m_original_settings;
    m_original_settings.cbSize = sizeof(m_original_settings);
    if (::SystemParametersInfo(SPI_GETANIMATION, sizeof(m_original_settings), &m_original_settings, 0)) {
        ANIMATIONINFO no_animation = { sizeof(no_animation), 0 };
        ::SystemParametersInfo(SPI_SETANIMATION, sizeof(no_animation), &no_animation, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
    }
}

И

int BackgroundTaskManager::changeMonitorState(bool turnOn)
{
    int lparam = 2;
    if(turnOn) {
        lparam = -1;
        BackgroundTaskManager::MonitorIsSleeping = false;
    } else {
        lparam = 2;
        BackgroundTaskManager::MonitorIsSleeping = true;
    }
    return SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)lparam);
}

Я использую точно такой же код с Qt 5.3.2 32-битной VS2010 в 64-битной Windows 7, и он компилируется без проблем. В моей текущей конфигурации я получаю ошибки связывания в частях функций ::SystemParametersInfo и SendMessage, а также кучу предупреждений в заголовках.

Предупреждения

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\sal_supp.h:57: warning: C4005: '__useHeader' : macro redefinition

Ошибки связывания

main.obj:-1: error: LNK2019: unresolved external symbol __imp__SystemParametersInfoW@16 referenced in function "void __cdecl suppressAnimations(void)" (?suppressAnimations@@YAXXZ)
backgroundtaskmanager.obj:-1: error: LNK2019: unresolved external symbol __imp__SendMessageW@16 referenced in function "private: int __thiscall BackgroundTaskManager::changeMonitorState(bool)" (?changeMonitorState@BackgroundTaskManager@@AAEH_N@Z)

Еще немного информации, я пробовал это также с помощью Qt5.5 32-битной VS2013 на 64-битной Win7 и также получил ошибки, как указано выше. Еще немного информации, в Qt Creator я могу нажать F2 на любой из символов выше, и я попаду в правильный заголовок.

Может ли кто-нибудь указать мне правильное направление?


person JasonKretzer    schedule 14.09.2015    source источник


Ответы (1)


Я знал, что это что-то простое:

LIBS += -L"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -ladvapi32 -luser32

Я не связывал user32.lib.

person JasonKretzer    schedule 14.09.2015