引用Windows应用商店应用程序项目中的C++WinRT组件
Referencing C++ WinRT component from a Windows Store app project
我有一个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不同),但可以使用此处的说明按照每个项目进行制作。
- 如何将 txt 文件中的行分隔为组件C++
- 从 WinRT C++组件访问 COM 对象
- 本机C++类与 WinRT 组件(引用类)之间的自动映射
- 不能将 create_async() 与 WRL WinRT 组件一起使用
- 如何使用WRL返回内置的winrt组件
- 在C++/WRL中使用静态方法创建WinRT组件
- WinRT 组件内C++类之间的互操作
- 在 WinRT 组件中跨 ABI 边界封送变体
- 在WinRT组件中使用第三方库
- 引用Windows应用商店应用程序项目中的C++WinRT组件
- 如何在方法中将自定义 WinRT 类型从 c# 传递到 c++ Windows 运行时组件
- 如何以最佳方式将字节数组从 C# 获取到C++ WinRT 组件
- 是否可以验证WinRT组件DLL
- 直接使用C++WinRT组件或C++XAML项目是否存在任何性能问题
- 调用WP 8(C#)中的WinRT组件时出现System.IO.FileNotFoundException错误
- 用于基于COM的库的带有WinRT组件的未解析外部符号LNK2019
- 为什么 wchar_t* 的第一个字符在传递给 WinRT 组件时会被擦除
- 在 <T>winrt 组件中的 IVector^ 和 C 样式字节数组之间进行转换
- 只包含接口的WinRT组件DLL
- 在不引用DLL/程序集的情况下加载WinRT组件