1

我正在尝试将 D3D11 调用包装在我正在开发的 API 中。

我制作了一个 C++/CX 组件库,我试图在 C# 中使用它。如果 C++/CX 组件和 C# 项目在同一个解决方案中,这很简单明了,一切都会正常工作......

...但是如果我在其 OWN 解决方案中创建我的 C++/CX API 组件,然后创建第二个 C# Metro App 解决方案并将我的 C++/CX 组件“项目”添加到它,然后让我的 C# Metro App 引用 C++/CX 组件项目尝试使用在 C++ 中声明的公共枚举时出现运行时错误。

这是我的 C# 应用程序似乎无法链接到的公共枚举类错误。

“找不到 Windows 运行时类型‘Reign.Video.D3D11.FeatureLevels’。”

这非常令人沮丧,因为我似乎无法让我的 C++/CX“API”东西在 C# 应用程序中正确链接以进行测试。您打算如何在 Metro 上高效地测试用 C++ 制作的 API?除非在同一个解决方案中,否则不能将 C++/CX 组件链接到 C# 项目,并且如果您尝试将 C++/CX 项目链接到 C# 解决方案并从那里链接它,则会出现运行时错误...

编辑:这是演示我的问题的下载链接: 下载

4

1 回答 1

4

Windows 运行时要求必须在与包含的 .winmd 文件的名称匹配的命名空间中找到所有类型。在您链接的演示中,您生成的 winmd 已命名ExternalWindowsRuntimeComponentProject.winmd,但您的非工作类位于Reign.Video.D3D11命名空间中。WinRT 不允许这样做,并且 .NET 类型加载器将无法找到不在关联命名空间中的类型。

此处的解决方案是确保FeatureLevels枚举位于名为 、 或 的Reign.winmdwinmdReign.Video.winmdReign.Video.D3D11.winmd

于 2012-08-07T20:25:53.010 回答