我正在尝试将 D3D11 调用包装在我一直在开发的 API 中。
我制作了一个 C++/CX 组件库,我想在 C# 中使用它。如果 C++/CX 组件和 C# 项目在同一个解决方案中,这很简单直接,一切都会正常进行...
...但是如果我在其 OWN 解决方案中创建我的 C++/CX API 组件,然后创建第二个 C# Metro App 解决方案并将我的 C++/CX 组件“项目”添加到其中,然后让我的 C# Metro App 引用 C++/CX 组件项目尝试使用在 C++ 中声明的公共(public)枚举时出现运行时错误。
这是我的 C# 应用程序似乎无法链接到的公共(public)枚举类错误。
"Could not find Windows Runtime type 'Reign.Video.D3D11.FeatureLevels'."
这非常令人沮丧,因为我似乎无法让我的 C++/CX“API”内容在 C# 应用程序中正确链接以进行测试。您打算如何在 Metro 上高效地测试用 C++ 编写的 API?你不能将 C++/CX 组件链接到 C# 项目,除非在同一个解决方案中,如果你尝试将 C++/CX 项目链接到 C# 解决方案并从那里链接它,你会遇到运行时错误...
编辑:这是显示我的问题的演示的下载链接: Download
最佳答案
Windows 运行时要求所有类型都必须在与包含的 .winmd 文件的名称相匹配的命名空间中找到。在您链接的演示中,您生成的 winmd 名为 ExternalWindowsRuntimeComponentProject.winmd
但您的非工作类位于 Reign.Video.D3D11
命名空间中。 WinRT 不允许这样做,并且 .NET 类型加载器将无法找到不在关联命名空间中的类型。
此处的解决方案是确保 FeatureLevels
枚举位于名为 Reign.winmd
、Reign.Video.winmd
的 winmd 中,或 Reign.Video.D3D11.winmd
。
关于c# - C++/CX 组件 "public enum class"在 C# Metro App 中没有正确链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805669/