跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

C++/WinRT 教程 (1):初识 WinRT 程序

C++/WinRT 是 Windows 运行时 API 的 C++17 语言投影,相比 Win32 二进制文件更小。介绍其前提配置(64 位编译、C++17 标准、VS2017+、Win10 SDK1803+ 及 TLS 设置),并通过示例演示如何使用 Syndication API 异步抓取 RSS Feed 并输出标题。

编程诗人发布于 2026/3/29更新于 2026/10/2698 浏览
C++/WinRT 教程 (1):初识 WinRT 程序

在这里插入图片描述

在这里插入图片描述

C++/WinRT 是 Windows 运行时 (WinRT) API 的 C++17 标准 的语言投影,提供了一系列新型 Windows API 的 C++ 实现库文件。相比 Win32 API,C++/WinRT 的表现更好,生成的二进制文件更小。它的表现甚至超过了直接使用 ABI 接口手动编写的代码。

前提配置

1. WinRT 只支持 64 位编译平台

在这里插入图片描述

2. WinRT 仅支持 C++17

在这里插入图片描述

WinRT 内部实现的协程与 C++ 标准库 (C++20 或以上) 的协程冲突,所以使用 C++20 以上的标准会报错。

3. 符合模式调否(/permissive)

在这里插入图片描述

符合模式调"是"会报错。

在这里插入图片描述

4. 需要 VS2017 或以上,VS2022 内置,其他版本需要带插件

VS2022 的开发包已经包括了 WinRT 组件。

在这里插入图片描述

5. 需要安装 Win10 SDK1803 及以上

在这里插入图片描述

6. 开启 TLS 1.0,1.1,1.2

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


入门程序

下面这个程序通过 Feed 抓取微软最新资讯(前提是 Feed 存在才能成功抓取)。

// WinRT HelloWorld.cpp
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.Web.Syndication.h>
#include <iostream>
#pragma comment(lib,"windowsapp.lib")

using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Web::Syndication;

int main()
{
    winrt::init_apartment(); // 初始化 WinRT 线程和 COM 接口
    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;
    }
}

在这里插入图片描述

RSS(聚合内容),是博客或新闻网站自动生成的一个摘要文件。每次网站内容更新,这个摘要文件也会更新,你可以不用点开网站就能获取信息。 而 Feed,就是接受 RSS 文件信息的接口,给程序读的。


代码解析

winrt::init_apartment();

WinRT 初始化函数:

  1. 所有的 WinRT 应用程序基于多线程,初始化一个线程。
  2. 绝大部分的 WinRT(包括其他与 COM 相关的 API)接口基于 COM 组件,初始化 COM 组件。
Uri rssFeedUri{ L"https://blogs.windows.com/feed" };
SyndicationClient syndicationClient;

创建 URI 资源标识符 和 WinRT 联合客户端。 URI 是标识某一互联网资源的字符串,有的时候 URI 可以是网址(URL)。 联合客户端相当于WinRT 的设备,用于操作 WinRT 库函数。

SyndicationFeed syndicationFeed = syndicationClient.RetrieveFeedAsync(rssFeedUri).get();

异步获取 feed 脚本并存储到 SyndicationFeed,这个 SyndicationFeed 相当于数组,输出需要遍历循环。 RetrieveFeedAsync 用于异步抓取脚本,联合客户端为每一个成员函数都提供了异步版本和阻塞函数。同理,Get() 用于阻塞进程,等待结果(相当于 join 函数)。

winrt::hstring titleAsHstring = syndicationItem.Title().Text();
std::wcout << titleAsHstring.c_str() << std::endl;

输出 Feed 脚本。 winrt::hstring 是 WinRT 特有的字符串,能够存储特殊格式的文本。 Title() 用于抓取 Feed 脚本中的标题。 Text() 用于类型转换,将信息转换为 hstring。

winrt::hstring titleAsHstring = syndicationItem.Summary().Text();

可以尝试替换上述代码行,运行查看不同效果。

目录

  1. 前提配置
  2. 1. WinRT 只支持 64 位编译平台
  3. 2. WinRT 仅支持 C++17
  4. 3. 符合模式调否(/permissive)
  5. 4. 需要 VS2017 或以上,VS2022 内置,其他版本需要带插件
  6. 5. 需要安装 Win10 SDK1803 及以上
  7. 6. 开启 TLS 1.0,1.1,1.2
  8. 入门程序
  9. 代码解析

更多推荐文章

查看全部
  • Microsoft Copilot Studio 全面升级:一站式智能体构建与治理平台
  • 阿里巴巴低代码引擎实战:构建企业级可视化开发平台
  • OpenClaw 本地部署及 cpolar 公网访问实战
  • Python Pandas 核心数据结构与操作实战
  • 内存新架构 ZAM 能否挑战 HBM?
  • Android Studio 安装与核心组件配置指南
  • OpenClaw 接入飞书机器人与 Kimi2.5 配置指南
  • AIGC 技术原理与实战应用指南
  • 基于 Neo4j 和 py2neo 的知识图谱搭建步骤详解
  • Docker 详细安装与基础命令指南
  • Diffusion Transformer (DiT):从图像生成到机器人动作预测的架构演进
  • 飞算 JavaAI 专业版深度测评:9.9 元月租的真实效能
  • AI 公司滥用用户协议:将用户视为数据提款机的现象分析
  • Python 爬虫 XPath 定位语法详解与实战
  • C++ 核心特性:继承机制
  • FPGA 高速通信:Aurora 64B/66B IP 核配置与回环实战
  • RAG 检索增强生成技术:现状、挑战与优化方案
  • TRAE、Qoder、Cursor 与 GitHub Copilot 深度对比:选型指南
  • Google GenAI Toolbox:企业级 AI 数据库中间件与 LLM-SQL 安全互联实践
  • 无人机相关法律法规全体系梳理

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online