情景:
我正在基于“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 ++项目的建议,但这与以下内容不兼容:
因此,在这种情况下,/ clr标志似乎不是一个选项。
问题:
如何引用C ++项目以便在C#Windows Store App项目中使用我的XAML Direct X渲染器?或者有更好的选择吗?
提前致谢。
答案 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使用。