无法添加对WinRT C ++ DLL项目的引用

时间:2012-12-25 07:46:21

标签: c# c++ xaml clr direct3d

情景:

我正在基于“Direct3D App”Visual Studio代码示例为Windows应用商店应用制作[edit:native WinRT] C ++ Direct X DLL项目。

这必须是我的Windows应用商店项目中的一个单独的DLL项目,因为我将在Windows 8 Metro应用程序和应用程序的Windows Phone版本中使用我的XAML UserControl和Direct X渲染器。

问题:

我无法在C#Windows Store应用程序项目中引用C ++项目。 Visual Studio拒绝使用以下单词:

A reference to <project-name> could not be added.

我见过使用/ clr标志编译C ++项目的建议,但这与以下内容不兼容:

  • 项目中某些API所需的/ ZW标志
  • “wrl.h”标题
  • 项目设置中的众多其他命令行标志

因此,在这种情况下,/ clr标志似乎不是一个选项。

问题:

如何引用C ++项目以便在C#Windows Store App项目中使用我的XAML Direct X渲染器?或者有更好的选择吗?

提前致谢。

2 个答案:

答案 0 :(得分:7)

我通过将C ++项目重新创建为Windows Runtime Component项目来解决问题。我最初是从Class Library (Windows Store apps)模板创建项目的。必须是Win RT模板具有一些使其能够工作的配置设置。

进行此更改后,可以将项目添加为C#项目中的参考。

由于@ user1610015的回答,我意识到我实际上是在开发原生的Win RT代码,而不是托管代码,这导致我尝试这个解决方案 - 谢谢!

答案 1 :(得分:4)

/ ZW 标志用于C ++ / CX项目。 C ++ / CX在语法上几乎与托管C ++(C ++ / CLI)完全相同,只是C ++ / CX完全不受管理。这可能是你认为你正在开发托管C ++的原因,而事实上你并非如此。

我没有使用过C ++ / CX,但据我所知,Windows运行时类是COM类。因此,我认为您可以使用Windows SDK中的 TlbImp.exe 工具从非托管DLL创建托管DLL,然后可以从C#项目中引用该DLL。尝试一下,让我知道它是否有效。

另一种选择是在没有C ++ / CX的情况下与Windows Runtime交谈。虽然C ++ / CX使Windows运行时编程变得更加容易,但并不是绝对必要的。您也可以使用WRL库。由于WRL库是纯C ++,因此它也可以从C ++ / CLI使用。