Странные ошибки компилятора с code :: blocks - PullRequest
0 голосов
/ 16 июля 2010

Вчера я переключился с Visual Studio на Code :: Blocks, и у меня просто появились странные сообщения об ошибках компилятора.

Я включил windows.h, и я могу прекрасно использовать все вызовы API, такие как создание окнаклассы и создание окон / кнопок и прочее.Но когда я попытался отправить некоторые нажатия клавиш с SendInput(), я получил сообщения об ошибках в этих двух декларациях:

INPUT ip;
KEYBDINPUT kbi;

Ошибки компиляции:

C:\code_blocks\test-app\main.cpp|21|error: 'INPUT' was not declared in this scope|
C:\code_blocks\test-app\main.cpp|22|error: 'KEYBDINPUT' was not declared in this scope|

Я даже могу щелкнуть правой кнопкой мыши KEYBDINPUT и INPUT структурирует и нажимает «Найти объявление», он находит его внутри «winuser.h» (который находится внутри), но он все еще дает мне эти сообщения об ошибках, что они не объявлены.

Этот код прекрасно работает в VS с включенным только windows.h.Я использую компилятор GNU GCC.

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Я думаю, вам нужны директивы препроцессора (Visual Studio может их уже добавить):

Что у вас есть _WIN32_WINNT, определенное как?

Возможно, вы могли бы добавить:

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif

или вы можете добавить его в директивы препроцессора как часть последовательности компиляции.Он будет у любого хорошего компилятора.

Если он все еще не работает, удалите защитные элементы и определите его напрямую.Возможно, это будет определено в другом месте.

Некоторые компиляторы имеют это в настройках директивы препроцессора: WIN32,_DEBUG,_CONSOLE,_MBCS,_WIN32_WINNT=0x0400

1 голос
/ 17 июля 2010

Чтобы уточнить ответ Changeling, если вы посмотрите на документацию, скажем, KEYBDINPUT , вы увидите, что в нижней части находится таблица минимальных поддерживаемых версий ОС.VC ++ устанавливает _WIN32_WINNT на более позднюю версию, чем MinGW / GCC (я предполагаю, что это компилятор, который вы используете с Code :: Blocks), поэтому, вероятно, вы столкнулись с этой проблемой.

Цель этого макросаЭто предотвращает непреднамеренное использование вами API-интерфейсов, которые не совместимы с вашей минимальной целевой целевой ОС.

Существует ряд макросов, связанных с версиями, которые используются заголовками Windows API.Подробности можно найти здесь

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