【问题标题】:Using a C++/CLI/CX/etc data package from an UWP C# app使用来自 UWP C# 应用程序的 C++/CLI/CX/etc 数据包
【发布时间】:2019-10-06 07:41:13
【问题描述】:

经过几天的试验,只取得了部分成功,我想问问我是否有机会,否则我总是会陷入死胡同。我有一个 UWP C# 应用程序,通常的框架,计划在 Windows 应用商店中分发。而且我还有一个我之前用过的用 C++(主要是 C)编写的数据包。旧的非托管代码根本不调用任何 Windows API,它只是一个数据格式包。但我需要直接从 C# 端访问它,它最重要的类型是作为值结构创作的,带有许多重载运算符(这很好,这种方法非常适合应用程序领域)。

从 WPF 应用程序中,我根本不会有任何问题,value struct 的 C++/CLI 包装器会暴露所有内容。但 UWP 应用不想这样做。如果我使用相同的 C++/CLI 包装器,虽然我可以让它自己编译,但 UWP 项目将完全拒绝引用 C++/CLI 项目。

我也尝试了较新的 C++/CX 风格,但它有很多限制,没有专门的构造函数,没有重载。它似乎比我需要的多得多。

有什么我错过的解决方案吗?也许仍然在 UWP 应用程序下以某种方式使用 C++/CLI(它的好处是已经编写好了:-))?

【问题讨论】:

  • 您不能在 UWP 应用中使用 C++/CLI,它具有 .NETCore 无法提供的与 AppDomain 相关的异常托管要求。最近这种情况发生了变化,作为 .NETCore v3 的一部分,他们创建了一个名为 ijwhost 的新主机,它可以支持 C++/CLI。它现在处于预览阶段,它是否可以在 UWP 应用程序中运行是一个公平的延伸。如果你想避免背后的箭头,你需要 C++/CX。
  • 哦,好吧。我还不知道我是否可以用/CX编译它,我开始尝试但有很多错误消息......

标签: c# uwp c++-cli c++-cx


【解决方案1】:

从 1803 版开始,您应该可以访问完整的 C++ 实现

C++/WinRT 是一个完全标准的现代 C++17 语言投影 对于 Windows 运行时

如果您想从 C# 使用 C++ 代码,那么您可能希望将其编译为 Windows 运行时组件,因为它们可以在任何其他 UWP 支持的语言中使用。 我认为this is demonstrated in this documentation,即使通过应用程序消费它似乎是在 C++ 中

【讨论】:

    【解决方案2】:

    最后,我成功了。有一个用 C++/CX 编写的中间辅助类(不是结构,因为固有的限制),而我实际使用的结构是在 C# 中定义的,使用这个中间。

    该过程中的错误消息主要与非常旧的底层代码有关,C,甚至不是 C++,涉及所有链接和外部内容。但不管它有多老,它仍然有效......

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 2010-09-06
      • 2016-01-29
      • 2014-02-20
      相关资源
      最近更新 更多