7

情景:

我正在为基于“Direct3D App”Visual Studio 代码示例的 Windows 应用商店应用程序制作 [编辑:本机 WinRT] C++ Direct X DLL 项目。

这必须是与我的 Windows Store App 项目分开的 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 渲染器?还是有更好的选择?

提前致谢。

4

2 回答 2

7

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

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

正是因为@user1610015 的回答,我才意识到我实际上是在开发本机 Win RT 代码,而不是托管代码,这让我尝试了这个解决方案 - 谢谢!

于 2012-12-28T10:36:13.293 回答
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 中使用。

于 2012-12-25T09:40:00.730 回答