VS2022运行C++/WinRT快速入门程序抛出winrt::hresult_error异常求助
C++/WinRT RetrieveFeedAsync抛出winrt::hresult_error异常的排查与解决
你遇到的winrt::hresult_error是WinRT API抛出的通用错误,需要先明确具体错误码和消息才能精准定位问题,以下是分步排查和解决方法:
第一步:捕获详细错误信息
先修改代码添加异常捕获逻辑,输出具体错误内容:
#include <winrt/Windows.Foundation.Collections.h> #include <winrt/Windows.Web.Syndication.h> #include <iostream> #include <winrt/Windows.Foundation.h> #pragma comment(lib, "windowsapp.lib") using namespace winrt; using namespace Windows::Foundation; using namespace Windows::Web::Syndication; int main() { try { winrt::init_apartment(); Uri rssFeedUri{ L"https://blogs.windows.com/feed" }; SyndicationClient syndicationClient; SyndicationFeed syndicationFeed = syndicationClient.RetrieveFeedAsync(rssFeedUri).get(); for (const SyndicationItem syndicationItem : syndicationFeed.Items()) { winrt::hstring titleAsHstring = syndicationItem.Title().Text(); std::wcout << titleAsHstring.c_str() << std::endl; } } catch (winrt::hresult_error const& ex) { std::wcout << L"错误信息: " << ex.message() << std::endl; std::wcout << L"HRESULT错误码: 0x" << std::hex << ex.code() << std::endl; } return 0; }
重新运行后,根据输出的错误码和消息,对应以下常见场景解决:
常见场景1:网络权限缺失(HRESULT: 0x80070005/E_ACCESSDENIED)
Windows.Web.Syndication属于UWP生态API,桌面程序调用时需要显式声明网络权限:
- 在Visual Studio中右键项目 → 添加 → 新建项 → 选择「应用程序清单文件」(appxmanifest)
- 打开清单文件,在
<Capabilities>节点下添加网络客户端权限:<Capabilities> <Capability Name="internetClient" /> </Capabilities> - 保存后重新编译运行。
常见场景2:TLS版本不兼容(HRESULT: 0x80072F8F/WININET_E_SECURITY_CHANNEL_ERROR)
目标站点要求TLS 1.2或更高版本,桌面程序默认可能未启用对应协议,可在初始化时添加代码启用:
// 需添加头文件和库依赖 #include <schannel.h> #pragma comment(lib, "schannel.lib") int main() { try { // 启用TLS 1.2和1.3 const auto status = SchannelSetDefaultProtocols( SCHANNEL_DEFAULT_PROTOCOLS_TLS12 | SCHANNEL_DEFAULT_PROTOCOLS_TLS13, SCHANNEL_DEFAULT_PROTOCOLS_TLS12 | SCHANNEL_DEFAULT_PROTOCOLS_TLS13); winrt::init_apartment(); // 后续原有代码... } // ...捕获异常逻辑 }
常见场景3:网络环境阻塞
如果错误码指向网络连接问题(如WININET_E_NAME_NOT_RESOLVED),先在浏览器中打开https://blogs.windows.com/feed确认是否能正常访问,排查代理、防火墙或网络环境是否阻止了请求。
内容的提问来源于stack exchange,提问作者DGAF
相关产品推荐
相关产品推荐

