引用Windows应用商店应用程序项目中的C++WinRT组件

Referencing C++ WinRT component from a Windows Store app project

本文关键字:C++WinRT 组件 项目 应用程序 Windows 应用 引用      更新时间:2023-10-16

我有一个Windows应用商店应用程序项目。在这个项目中,我想引用一个用C++编写的Windows运行时组件。此组件可作为DLL+WinMD组合使用。但是我不知道该怎么做。我尝试将应用VS项目中的文件引用添加到DLL和WinMD文件中,但我收到一个错误,说无法添加DLL。然后我尝试将它作为二进制文件添加到输出目录中,但仍然没有成功。

我没有这个WinRT组件的来源。我知道如果我有WinRT组件的VS项目,那么我可以简单地将应用程序项目中的引用添加到WinRT组件项目中,这一切都很有效。但在WinMD/DLL文件松动的情况下,它不起作用。

我该怎么做?

用C#编写的WinRT组件只生成一个文件,即winmd文件,该文件包含组件的元数据和实现。此外,相同的文件可以用于所有体系结构(x86、x64和ARM)。

然而,用C++编写的WinRT组件会生成两个文件——一个是包含元数据的winmd文件,另一个是含有实现的DLL文件。此外,DLL文件按体系结构是单独的(x86、x64和ARM各一个)。正是由于这个原因:

  • 只添加对winmd文件的引用是没有意义的(因为实现是在DLL中)
  • 添加对单个DLL文件的引用没有意义,需要根据您的项目配置/体系结构使用不同的DLL

当您将应用程序VS项目的引用添加到组件VS项目时,VS项目系统会为您处理所有上述复杂性。但是,当您没有组件的源代码/项目时,可以使用扩展SDK机制。如果所有三种体系结构的DLL+WinMD组合都打包为扩展SDK,那么VS能够正确地将正确的配置/体系结构特定组件添加到应用程序输出中。

要了解C++WinRT扩展SDK的真实示例,请查看Bing Maps SDK。安装SDK,然后转到以下文件夹查看扩展SDK的结构:

C: \Users\\AppData\Local\Microsoft SDKs\Windows\v8.1\ExtensionSDKs\Bing.Maps.Xaml\1.313.0825.0

请注意,您不一定需要在每台要使用项目的机器上安装扩展SDK。目前,ESDK是一个机器范围的实体(与NuGet不同),但可以使用此处的说明按照每个项目进行制作。