You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Visual C++中GetAsyncKeyState标识符未定义错误解决求助

解决GetAsyncKeyState标识符找不到的问题

嘿,作为刚接触C++、DirectX和Windows编程的新手,碰到这个问题太正常了,我帮你一步步排查解决:

先搞定最可能的命名空间冲突问题

你已经引入了using namespace Windows;,这个命名空间属于WinRT框架,而GetAsyncKeyState是原生Win32 API的全局函数,有时候编译器会因为命名空间的优先级问题找不到它。解决方法很简单,在函数名前加上全局命名空间标识符::,明确告诉编译器调用全局的Win32函数:

return (::GetAsyncKeyState(key) & 0x8000) != 0;

另外要注意!你原来的代码括号位置有逻辑错误:&的优先级比!=低,原来的表达式会被解析成GetAsyncKeyState(key) & (0x8000 != 0),完全不是你想要的判断逻辑,上面的代码也顺便修正了这个问题。

如果还是不行,检查头文件和编译宏

  • 虽然你已经包含了Windows.h,但如果项目里默认开启了WIN32_LEAN_AND_MEAN宏(很多DirectX项目会用这个来减少编译时间),可能会隐藏部分Win32 API。你可以尝试在包含Windows.h前取消这个宏定义,或者手动添加winuser.hGetAsyncKeyState的实际声明头文件):
#undef WIN32_LEAN_AND_MEAN
#include <Windows.h>
// 或者额外添加
#include <winuser.h>

特殊情况:如果你是UWP项目

如果你的项目是UWP(通用Windows平台)应用,原生Win32的GetAsyncKeyState是被禁用的,这时候得用UWP专属的API来获取键盘状态,比如借助CoreWindow的方法:

CoreWindow^ window = CoreWindow::GetForCurrentThread();
VirtualKeyStates state = window->GetKeyState(static_cast<VirtualKey>(key));
return (state & VirtualKeyStates::Down) != 0;

按照上面的步骤试一下,应该能解决你的问题!

内容的提问来源于stack exchange,提问作者Josh

火山引擎 最新活动