You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,桌面程序调用时需要显式声明网络权限:

  1. 在Visual Studio中右键项目 → 添加 → 新建项 → 选择「应用程序清单文件」(appxmanifest)
  2. 打开清单文件,在<Capabilities>节点下添加网络客户端权限:
    <Capabilities>
        <Capability Name="internetClient" />
    </Capabilities>
    
  3. 保存后重新编译运行。

常见场景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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:36:17