Ram*_*rma 4 c# c++ windows-8 windows-runtime
我有一个 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 各一个)。正是由于这个原因:
当您将应用程序 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 不同),但可以使用此处的说明按项目制作它们。