c# - C++/CX 组件 "public enum class"在 C# Metro App 中没有正确链接

标签 c# enums microsoft-metro windows-runtime c++-cx

我正在尝试将 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.winmdReign.Video.winmd 的 winmd 中,或 Reign.Video.D3D11.winmd

关于c# - C++/CX 组件 "public enum class"在 C# Metro App 中没有正确链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805669/

相关文章:

c# - 在 Outlook 中处理大量邮件

c# - 验证使用仅初始化 setter 初始化的 C# 对象

c# - 在 Windows 8 上获取操作系统、平台和设备信息

windows-8 - Metro风格应用程序: WinJS a must?

c# - (C#) Azure - 实时身份验证期间出现空引用异常

c# - IIS 和 NET Core HTTP 错误 500.30 - ANCM 进程内启动失败 .net core 3.1

c# - 将鼠标悬停在图像控件上,例如 asp.net 中的 facebook 图片

ruby-on-rails - 我应该如何测试 Rails 枚举?

c# - 如何使用 LINQ 和 lambdas 对列表中对象的位标志枚举属性执行按位或运算?

c# - NHibernate MySQL 枚举