编译ble-win-cpp添加CppWinRT后WinRT库引入失效如何解决
编译配置解决方案
- 清理冗余NuGet包
首先卸载你手动添加的Microsoft.Windows.CppWinRT NuGet包,原项目依赖的CppWinRT版本与高版本NuGet包不兼容:高版本CppWinRT移除了winrt::impl::wait_for私有API是第一个报错的根源,额外安装的NuGet包还会触发头文件路径冲突,直接导致WinRT头文件引入失效。 - 调整基础项目配置
- 右键项目打开属性面板,在「常规」选项卡,将目标平台版本修改为10.0.19041.0或更高的兼容Windows SDK版本,平台工具集选择当前VS对应的版本,比如VS2022选v143、VS2019选v142
- 切换到「C/C++→常规」选项卡,检查附加包含目录,删除多余的第三方CppWinRT头文件路径,保留项目自带的路径优先级
- 修复头文件语法错误
你提供的引入语句中存在多余空格,会直接导致头文件查找失败,修正为如下格式:#include <winrt/Windows.Foundation.h> #include <winrt/Windows.Devices.Bluetooth.h> #include <winrt/Windows.Devices.Enumeration.h> #include <winrt/Windows.Devices.Bluetooth.Advertisement.h> #include <winrt/Windows.Devices.Bluetooth.GenericAttributeProfile.h> #include <winrt/Windows.Storage.Streams.h> - 启用C20标准
打开属性面板的「C/C→语言」选项,将C语言标准设置为「ISO C20 标准(/std:c20)」,WinRT异步接口依赖C20协程特性支持。 - 配置链接器依赖
切换到「链接器→输入」选项,在附加依赖项中添加windowsapp.lib,这是WinRT程序的默认系统依赖库。 - 全量重新生成
先执行「清理解决方案」操作,再执行「生成解决方案」,避免增量编译的缓存文件干扰编译结果。
内容的提问来源于stack exchange,提问作者xikov
相关产品推荐
相关产品推荐

