引入winrt/Windows.Gaming.Input.h后出现链接器未解析错误
解决C++/WinRT引入Windows.Gaming.Input时的LNK2028/LNK2019未解析符号错误
针对你遇到的问题,直接给出排查和解决步骤:
强制链接WindowsApp.lib:所有C++/WinRT的核心符号都在这个库中,未解析的
WINRT_开头函数大概率是因为没链接它。可以在代码开头添加:#pragma comment(lib, "windowsapp.lib")或者在项目属性→链接器→输入→附加依赖项中加入
windowsapp.lib。确认C++/WinRT项目配置:
- 确保已通过NuGet安装
Microsoft.Windows.CppWinRT包,手动引入头文件容易遗漏底层配置; - 检查项目属性→常规→Windows SDK版本,必须是Windows 10 1809(10.0.17763.0)及以上,Windows.Gaming.Input的WinRT API在该版本后才完整支持;
- 再次确认C语言标准已设为C17或更高,且编译选项中该设置已生效(部分项目可能在子项目中覆盖了全局设置)。
- 确保已通过NuGet安装
处理C++/CLI混合模式冲突:
如果你是在C++/CLI项目中混用C++/WinRT,需要注意:- 将WinRT相关代码放在单独的
.cpp文件中,给这些文件禁用/clr编译选项(项目属性→C/C++→常规→公共语言运行时支持→选择“无”); - 避免在CLI代码中直接调用WinRT对象,通过纯C++层做中转交互。
- 将WinRT相关代码放在单独的
调整头文件引入顺序:
尝试在所有WinRT头文件之前先引入基础头:#include <winrt/base.h> #include <winrt/Windows.Gaming.Input.h>
内容的提问来源于stack exchange,提问作者Doshorte Dovencio
相关产品推荐
相关产品推荐

