我一开始也在找“C/WinRT 专用模板”后来发现其实不必。直接新建一个普通的 C 控制台项目也可以只要工具链和链接配置正确。推荐路线新建 Console AppC平台选 x64C 语言标准至少 C17建议 C20加 WinRT 头文件链接 WinRT 相关库二、Visual Studio 配置位置1. C 语言标准项目 - 属性 - 配置属性 - C/C - 语言 - C 语言标准建议选择ISO C20 标准或至少 C17我之前踩过一个坑命令行把 /std:c20 打成了 /std:c20结果所有报错都在提示“需要 C17”实际是参数写错了。2. 链接库配置项目 - 属性 - 配置属性 - 链接器 - 输入 - 附加依赖项添加两项windowsapp.libruntimeobject.lib三、#pragma comment(lib, ...) 是什么这两行代码是给链接器下指令#pragma comment(lib, windowsapp.lib) #pragma comment(lib, runtimeobject.lib)作用等价于你在“链接器 - 输入 - 附加依赖项”里手动添加库。也就是说这两种方式本质上都在做同一件事告诉链接器去链接哪些库。它们的关系项目属性方式配置集中在工程里团队协作更直观pragma 方式配置写在源码里单文件示例更方便搬运建议学习和示例阶段pragma 很方便团队项目更推荐项目属性统一管理两者二选一即可避免重复维护四、最小示例代码可直接运行下面这段是我用于验证 C/WinRT 环境是否正常的最小例子点击查看代码如果输出了 Host 和 Path说明环境已经通了。五、逐行解释关键代码include 头文件#include winrt/base.h #include winrt/Windows.Foundation.hwinrt/base.hC/WinRT 基础类型和初始化能力winrt/Windows.Foundation.h引入 Windows.Foundation 命名空间里的类型比如 Uri注意大小写和拼写Foundation 很容易拼错成 fundation错一个字母就会报找不到头文件。初始化线程单元winrt::init_apartment(winrt::apartment_type::multi_threaded);这一步是初始化 WinRT 运行环境底层可理解为 COM Apartment 初始化。不初始化就直接调用 WinRT API很多场景会出问题。multi_threaded 的含义是使用多线程单元模式控制台程序常用这个就够了。3. 创建 Uri 对象winrt::Windows::Foundation::Uri uri(Lhttps://learn.microsoft.com/zh-cn/windows);这行代码就是在用 WinRT 的 Uri 类型解析地址。后续可以直接取 Host、Path、Query 等属性不需要自己手写字符串解析。C/WinRT 的优势为什么值得学
先说结论:C++/WinRT 不一定要专用模板
我一开始也在找“C/WinRT 专用模板”后来发现其实不必。直接新建一个普通的 C 控制台项目也可以只要工具链和链接配置正确。推荐路线新建 Console AppC平台选 x64C 语言标准至少 C17建议 C20加 WinRT 头文件链接 WinRT 相关库二、Visual Studio 配置位置1. C 语言标准项目 - 属性 - 配置属性 - C/C - 语言 - C 语言标准建议选择ISO C20 标准或至少 C17我之前踩过一个坑命令行把 /std:c20 打成了 /std:c20结果所有报错都在提示“需要 C17”实际是参数写错了。2. 链接库配置项目 - 属性 - 配置属性 - 链接器 - 输入 - 附加依赖项添加两项windowsapp.libruntimeobject.lib三、#pragma comment(lib, ...) 是什么这两行代码是给链接器下指令#pragma comment(lib, windowsapp.lib) #pragma comment(lib, runtimeobject.lib)作用等价于你在“链接器 - 输入 - 附加依赖项”里手动添加库。也就是说这两种方式本质上都在做同一件事告诉链接器去链接哪些库。它们的关系项目属性方式配置集中在工程里团队协作更直观pragma 方式配置写在源码里单文件示例更方便搬运建议学习和示例阶段pragma 很方便团队项目更推荐项目属性统一管理两者二选一即可避免重复维护四、最小示例代码可直接运行下面这段是我用于验证 C/WinRT 环境是否正常的最小例子点击查看代码如果输出了 Host 和 Path说明环境已经通了。五、逐行解释关键代码include 头文件#include winrt/base.h #include winrt/Windows.Foundation.hwinrt/base.hC/WinRT 基础类型和初始化能力winrt/Windows.Foundation.h引入 Windows.Foundation 命名空间里的类型比如 Uri注意大小写和拼写Foundation 很容易拼错成 fundation错一个字母就会报找不到头文件。初始化线程单元winrt::init_apartment(winrt::apartment_type::multi_threaded);这一步是初始化 WinRT 运行环境底层可理解为 COM Apartment 初始化。不初始化就直接调用 WinRT API很多场景会出问题。multi_threaded 的含义是使用多线程单元模式控制台程序常用这个就够了。3. 创建 Uri 对象winrt::Windows::Foundation::Uri uri(Lhttps://learn.microsoft.com/zh-cn/windows);这行代码就是在用 WinRT 的 Uri 类型解析地址。后续可以直接取 Host、Path、Query 等属性不需要自己手写字符串解析。C/WinRT 的优势为什么值得学