我有一个Windows应用商店应用项目。在这个项目中,我想引用一个用C ++编写的Windows运行时组件。该组件可用作DLL + WinMD组合。但是我无法弄清楚如何做到这一点。我已经尝试从应用程序VS项目添加文件引用到DLL和WinMD文件,但我收到一个错误,说无法添加DLL。然后我尝试将它作为二进制文件添加到输出目录中,但仍然没有运气。
我没有此WinRT组件的来源。我知道如果我有WinRT组件的VS项目,那么我可以简单地从我的应用程序项目添加一个引用到WinRT组件项目,这一切都正常。但是在松散的WinMD / DLL文件的情况下,它不起作用。
我该怎么做?
答案 0 :(得分:4)
用C#编写的WinRT组件只生成一个文件,winmd文件包含元数据和组件的实现。此外,相同的文件可用于所有体系结构(x86,x64和ARM)。
但是,用C ++编写的WinRT组件会生成两个文件 - 一个包含元数据的winmd文件和一个包含该实现的DLL文件。此外,DLL文件是每个体系结构分开的(x86,x64和ARM各一个)。出于这个原因:
当您将应用程序VS项目的引用添加到组件VS项目时,VS项目系统会为您处理上述所有复杂性。但是,如果没有组件的源/项目,则可以使用Extension SDK机制。如果将所有三种体系结构的DLL + WinMD组合打包为Extension SDK,则VS能够正确地将正确的配置/体系结构特定组件添加到app输出中。
有关C ++ WinRT Extension SDK的真实示例,请查看Bing Maps SDK。安装SDK,然后转到以下文件夹以查看Extension SDK的结构:
C:\ Users \\ AppData \ Local \ Microsoft SDKs \ Windows \ v8.1 \ ExtensionSDKs \ Bing.Maps.Xaml \ 1.313.0825.0
请注意,您不一定需要在要使用项目的每台计算机上安装Extension SDK。目前,ESDK是一个机器范围的实体(与NuGet不同),但它们可以使用instructions here按项目制作。