【问题标题】:Errors trying to call GetAsyncKeyState() in C++/CLI project尝试在 C++/CLI 项目中调用 GetAsyncKeyState() 时出错
【发布时间】:2023-04-11 06:19:01
【问题描述】:

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

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

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

我同时遇到了 Unresolved Token 和 Unresolved External Symbol 错误 "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)

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

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

【问题讨论】:

    标签: c++ windows visual-studio-2010 command-line-interface


    【解决方案1】:

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

    this case 中,您需要windows.h(您必须已经拥有)和user32.lib(可能缺少)。所以添加

    #pragma comment(lib, "user32.lib")
    

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

    【讨论】:

      【解决方案2】:

      刚刚遇到同样的问题。解决方案是链接一个具有相应符号的 .lib,在本例中为 user32.lib。

      我通过使项目使用继承值解决了 Visual Studio 中的一个问题。在您的项目属性中选中此复选框,它应该修复它:

      【讨论】:

        猜你喜欢
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 2014-09-12
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        相关资源
        最近更新 更多