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

7

场景:

我正在基于“Direct3D App”Visual Studio代码示例制作一个[native WinRT] C++ Direct X DLL项目,用于Windows Store应用程序。

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

问题:

我无法在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应用程序项目中使用我的XAML Direct X渲染器?或者是否有更好的替代方案?

谢谢提前。

2个回答

7
我通过重新创建C++项目,将其作为Windows Runtime Component项目来解决了问题。最初我是用Class Library (Windows Store apps)模板创建的项目。这个Win RT模板一定有一些配置设置让它能够正常工作。
在做出这些更改后,该项目就可以作为C#项目的引用添加进去了。
由于@user1610015 的答案,我意识到我实际上正在开发本地Win RT代码,而不是托管代码,这促使我尝试这个解决方案——谢谢!

4
/ZW 标志用于 C++/CX 项目。C++/CX 在语法上与托管的 C++(C++/CLI)几乎完全相同,但 C++/CX 是完全非托管的。这可能会让您认为自己正在开发托管的 C++,而事实上并非如此。
我没有使用过 C++/CX,但据我所知,Windows 运行时类是 COM 类。因此,我认为您可以使用 Windows SDK 中的 TlbImp.exe 工具从非托管 DLL 创建托管 DLL,然后从 C# 项目中引用它。请尝试并让我知道结果是否有效。
另一个选择是不使用 C++/CX 与 Windows 运行时进行交互。虽然 C++/CX 让 Windows 运行时编程变得更加容易,但它并非绝对必需。您还可以使用 WRL 库。由于 WRL 库是纯 C++,因此也可以从 C++/CLI 中使用。

谢谢您提供这些信息 - 我不知道我没有开发非托管代码。我最终不需要尝试Tlbimp.exe - 请参见我的上面的答案。 - Brett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接