9

有谁知道目前是否可以从编译为 wasm 的 C# 调用 C++(或者更准确地说是 Uno Platform 应用程序)?

我对 WebAssembly 相当陌生,但我设法将 C++ 函数编译为 wasm 并从 JavaScript 调用它。我还从 Uno 获得了快速启动项目(它允许您将用 C#/XAML 编写的 UWP 应用程序编译为 wasm 并在浏览器中运行它们)正在运行。

我每天都编写 C# 和 C++,但我想不通的是“两种语言之间的互操作”+ WebAssembly 组合。我假设我需要将两种语言的代码编译为 2 个单独的 wasm 文件,然后以某种方式将它们链接在一起或在运行时加载 C++ 文件。我今天想做的事有可能吗?

编辑:要明确:这个想法是所有代码最终都编译为 wasm。

4

1 回答 1

7

自上个月以来,mono-wasm 运行时支持 P/Invoke,使用两种模式:

  • 使用单声道解释器运行时,任意 WebAssembly 模块的动态链接
  • 在 mono 的 AOT 下运行时,由先前的 emscripten 调用生成的 LLVM 位码文件的静态链接

后者目前正在本 PR的 Uno.Wasm.Bootstrapper中进行研究。

它具有另一个 .NET 运行时可能具有的完全相同的行为,这意味着不能直接访问 C++,并且您必须公开 C API 才能使用它。

使用 C++ 有一些注意事项,其中运行时需要强制包含在单声道运行时的二进制文件中,使其更大。这可能很快就会改变,因为 emscripten 正在转向完整的 LLVM 后端。

Uno.Wasm.Bootstrapper 的一些文档可在此处获得

于 2019-06-05T20:16:57.430 回答