2011-09-20 40 views
10

据说你可以创建一个可以在C#中使用的C++ WinRT组件。我有一个简单的测试项目 - 一个C#XAML应用程序和一个只使用基本WinRT组件项目模板的C++项目。当我尝试在C#XAML项目中添加项目引用时,它说它不能添加引用(不知道为什么)。我可以构建本机WinRT组件,并生成.winmd文件,并且可以使用添加引用对话框中的浏览按钮手动添加对此.winmd文件的引用。这允许我访问本地库中的方法,但是当我构建时,它表示它使用Platform.IDisposable,但是该类型在未引用的程序集中定义。我没有看到任何会议证明这种情况。如何从托管项目引用本机WinRT组件?

回答

2

您引用的C++ WinRT程序集可能使用实现IDisposable接口的对象,因此您还必须引用包含该接口的C++程序集。

+0

什么是C++程序集?据推测,WinRT的所有核心程序集都已经自动引用。在参考对话框中没有额外的标准组件可供选择。 –

+3

@Jeremy看起来你需要添加一个对Microsoft.VCLibs到.NET应用程序的引用来解决'Platform.IDisposable'问题(在附注中,我会期望它被投影为System.IDisposable ',但它不会发生......)。但是,将其作为参考添加似乎会导致部署时出现问题。可能是开发预览怪癖。 –

+0

是的,我注意到了Microsoft.VCLibs并尝试了它,它看起来就是它定义的位置,但我在部署时也遇到了错误。将不得不研究包装的东西 - 可能VCLibs必须包含在包中才能使用?任何人都可以得到这个工作? –

2

因此,在添加对Microsoft.VCLibs的引用后,我遇到了类似的问题,我无法部署。但是我注意到,默认情况下,WinRT组件被编译为x86代码,而C#Metro风格的应用程序以任何cpu为目标,这是我的一个根本原因。将C#应用程序切换到x86可解决问题。

相关问题