创建 C++ WinRT 组件

这篇博客详细介绍了如何创建和在不同平台上消费C++ WinRT组件,包括C++ Desktop、C++/WinRT UWP、.Net Framework Desktop和.Net5 Desktop。文章涵盖了从项目设置、Nuget包管理器的使用、引用添加到调用组件的完整过程,并特别强调了VCRTForwarders.140包在解决运行时库问题上的作用。
摘要由CSDN通过智能技术生成

创建 C++ WinRT 组件

通过 Cpp/WinRT 项目模板创建一个 WinRT 组件工程 CppWinrtComponent.vcxproj,主要接口定义如下:

namespace CppWinrtComponent
{
    [default_interface]
    runtimeclass Class
    {
        Class();
        String GetModule();
    }
}

最终该项目 CppWinrtComponent 可以被编译生成两个 WinRT 组件的核心部分:

  • CppWinrtComponent.winmd, 提供接口描述
  • CppWinrtComponent.dll, 负责接口实现,基于 COM 技术

由于该项目 CppWinrtComponent.vcxproj 默认的平台是 Universal Windows,所以它使用的 VC 运行时函数都是 Store 版本,这导致在非 Universal Windows 应用中会出现找不到 VC 运行时库的异常。为了解决这个问题,针对该类型项目,Visual Studio 2019 version 16.9 版本开始支持属性 Windows Desktop Compatible,设置该属性后所有的 VC 运行时函数会被链接到 Deskotp 版本。

该属性可以在 VS 项目属性面板中配置,对应的 vcxproj 中配置如下:

<PropertyGroup>
    <DesktopCompatible>true</DesktopCompatible>
</PropertyGroup>

消费 C++ WinRT 组件

本文主要讨论在如下语言、框架中使用该组件:

  • C++ Desktop
  • C++ UWP
  • .Net Framework Desktop
  • .Net5 Desktop

C++ Desktop

使用 VS 的 C++ 项目模板,创建一个空的控制台应用程序 ConsumerCppConsole.vcxproj。

1. 使用 Nuget 包管理器给该项目安装 Microsoft.Windows.CppWinRT

建议安装最新版本,在 Microsoft.Windows.CppWinRT 2.0.200115.8 之后版本中,引入了对 Reg Free 的支持,可以简化 WinRT 组件使用流程,不需要创建额外的 Manifest 文件。

2. 添加对项目 CppWinrtComponent 生成的 CppWinrtComponent.WinMD 的引用

不能直接在 VS 中添加对项目 CppWinrtComponent.vcxproj 的工程引用,但是可以直接添加对文件 CppWinrtComponent.winmd 的引用,在该文件引用的属性中,VS 默认会把”Copy Local” 设置为 True,该操作会导致 CppWinrtComponent.dll 在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值