如何从托管项目中引用本机 WinRT 组件?
Posted
技术标签:
【中文标题】如何从托管项目中引用本机 WinRT 组件?【英文标题】:How to reference a native WinRT component from a managed project? 【发布时间】:2011-11-21 11:10:48 【问题描述】:据说您可以创建一个可以在 C# 中使用的 C++ WinRT 组件。我有一个简单的测试项目 - 一个 C# XAML 应用程序和一个仅使用基本 WinRT 组件项目模板的 C++ 项目。当我尝试在 C# XAML 项目中添加项目引用时,它说它无法添加引用(不知道为什么)。我可以构建本机 WinRT 组件,并生成一个 .winmd 文件,我可以使用添加引用对话框中的浏览按钮手动添加对这个 .winmd 文件的引用。这允许我访问本机库中的方法,但是当我构建时,它说它正在使用 Platform.IDisposable,但该类型是在未引用的程序集中定义的。我还没有看到任何会议演示了这种情况。
【问题讨论】:
【参考方案1】:找到答案了!看起来这是一个小故障,但它有一个解决方法: http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/1900bd21-8693-4127-800a-f35cfd5daac2
基本上,首先清理 WinRT 组件项目,然后添加引用,然后手动添加对位于 \VC\bin 中的 platform.winmd 的引用,然后就可以开始了。
【讨论】:
【参考方案2】:您引用的 C++ WinRT 程序集可能使用实现 IDisposable 接口的对象,因此您还必须引用包含该接口的 C++ 程序集。
【讨论】:
什么 C++ 程序集?据说,WinRT 的所有核心程序集都已被自动引用。参考对话框中没有其他标准组件可供选择。 @Jeremy 看起来您需要将Microsoft.VCLibs
的引用添加到.NET 应用程序才能解析Platform.IDisposable
(附带说明,我希望它被投影为@ 987654323@,但它不会发生......)。但是,将其添加为参考似乎会在部署时引起问题。可能是开发预览的怪癖。
是的,我注意到 Microsoft.VCLibs 并尝试了它,它看起来就是它的定义位置,但我在部署时也遇到了错误。将不得不研究包装的东西——也许 VCLibs 必须包含在包中才能工作?任何人都能让它工作吗?
也许您应该发布一个新问题,因为您可能会收到回复,因为原始问题现在发生了变化。【参考方案3】:
所以我遇到了类似的问题,在添加了对 Microsoft.VCLibs 的引用后,我无法部署。但是我注意到,默认情况下 WinRT 组件被编译为 x86 代码,而 C# Metro 风格应用程序针对任何 cpu,这在我的案例中是根本原因。将 C# 应用程序切换到 x86 解决了这个问题。
【讨论】:
以上是关于如何从托管项目中引用本机 WinRT 组件?的主要内容,如果未能解决你的问题,请参考以下文章