Почему _WIN32_WINNT == 0x400 в Qt Creator на компьютере с Windows 7? - PullRequest
0 голосов
/ 26 марта 2011

Я использую Qt Creator 2.0.1 на основе Qt 4.7.0 (32 бит). ОС Windows 7 Ultimate (32-разрядная версия).

Я бы хотел перезапустить Windows, используя следующий вызов функции:

ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_SYSTEM |
                          SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY);

Я добавил windows.h и reason.h в исходный код и добавил libuser32 в раздел LIBS файла * .pro.

После компиляции кода Qt Creator выдает ошибку о том, что SHTDN_REASON_MAJOR_SYSTEM и SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY не определены в области.

Я изучил файл reason.h, поставляемый с mingw. Я обнаружил, что #define находятся внутри #if:

#if (_WIN32_WINNT >= 0x0501)

Я посмотрел на значение _WIN32_WINNT, которое выглядит как 1024 (0x400).

Я понимаю, что это какой-то номер версии, и эти #define должны быть скомпилированы после определенной версии. Но почему _WIN32_WINNT так низко в Windows 7? Как я могу использовать эти #define с? Я не хочу ставить прямые значения вместо SHTDN_REASON_MAJOR_SYSTEM и SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY.

1 Ответ

7 голосов
/ 26 марта 2011

Значение _WIN32_WINNT указывает версию API Win32, с которой вы компилируете. Это не имеет ничего общего с версией ОС, которую вы используете при сборке.

Если установить это значение более высоким, прежде чем включать заголовочные файлы API, станут доступны другие функции и определения API, но использование этих функций может привести к тому, что приложение откажется работать в предыдущих версиях Windows. Как правило, вы хотите использовать наименьшее значение, которое вы можете избежать.

Безопасно использовать значения #define из более высоких версий API, если вы проверяете наличие ошибок в функциях Win32, указывающих, что это значение не поддерживается. Однако использование функций Win32 приведет к сбою приложения при запуске с ошибками типа «Импорт DLL не найден».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...