code :: blocks出现奇怪的编译错误
我昨天从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编译器。
我认为你需要预处理器指令(Visual Studio可能已经添加了它们):
_WIN32_WINNT
定义为什么?
也许你可以添加:
#ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0400 #endif
或者您可以将它作为编译序列的一部分添加到预处理器指令中。 任何好的编译器都会拥有它。
如果仍然无效,请删除包含警卫并直接定义。 也许它正在其他地方定义。
一些编译器将在预处理器指令设置中具有此function: WIN32,_DEBUG,_CONSOLE,_MBCS,_WIN32_WINNT=0x0400
要详细说明Changeling的答案,如果你看一下说KEYBDINPUT的文档,你会看到它附近有一个支持最低版本操作系统版本的表。 VC ++将_WIN32_WINNT设置为比MinGW / GCC更高的版本(我猜测它是您使用Code :: Blocks的编译器),这可能是您遇到此问题的原因。
此宏的目的是防止您无意中使用与最小目标操作系统不兼容的API。
Windows API标头使用了许多与版本相关的宏。 细节可以在这里找到