尝试在 C++/CLI 项目中调用 GetAsyncKeyState() 时出错

cha*_*ian 2 c++ windows command-line-interface visual-studio-2010

我正在开发一个相当复杂的项目,在该项目中我正在使用 C++/CLI 的项目访问用普通旧式 C++ 编写的类。它是一个 Windows 窗体 GUI 项目,使用许多与其(非 CLI)C++ 姐妹项目相同的功能。

在我试图调整以在两种环境中工作的一门课程中,我使用此功能轮询按键:

inline bool IsKeyDown(unsigned char ch) const { 
    return (GetAsyncKeyState(ch) & (1u << 15)) != 0; 
}
Run Code Online (Sandbox Code Playgroud)

我同时收到“无法解析的令牌”和“无法解析的外部符号”错误 "extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z) referenced in function "public: bool __clrcall Engine::InputManager::IsKeyDown(unsigned char)const " (?IsKeyDown@InputManager@Engine@@$$FQBM_NE@Z)

显然,这个问题与 CLI 友好的实现有关,GetAsyncKeyState()但我不确定需要做什么不同。谁能指导我如何解决这个问题?该函数在我的非 CLI 环境中正常运行(并且已经运行了几个月)。我对 CLI 东西非常陌生,所以任何帮助都会很棒,而且任何帮助都不会太具体。

如果有帮助,我正在使用 Visual Studio 2010 并使用/clr参数(not:pure:safe)进行编译。

Har*_*ton 5

MSDN提供了任何特定函数需要包含哪些头文件和库的详细信息。

这种情况下,您需要 windows.h(您必须已经拥有)和 user32.lib(可能缺少)。所以添加

#pragma comment(lib, "user32.lib")
Run Code Online (Sandbox Code Playgroud)

在代码的顶部,一切都应该很好。或者,您可以将 user32.lib 添加到项目属性页面中的库列表中,记住为每个配置(例如调试和发布)执行此操作。