可以从编译为wasm的C#中调用C ++吗?

时间:2019-06-05 19:27:12

标签: c# c++ webassembly uno-platform

有人知道当前是否可以从编译为wasm的C#中调用C ++(或更精确地说,是Uno Platform应用程序)?

我对WebAssembly相当陌生,但是我设法将C ++函数编译为wasm并从JavaScript调用它。 我还从Uno获得了一个快速入门项目(该项目可让您将用C#/ XAML编写的UWP应用编译为wasm并在浏览器中运行)。

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

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

1 个答案:

答案 0 :(得分:5)

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

  • Dynamic linking的任意WebAssembly模块与Mono解释器一起运行时
  • 在mono的AOT下运行时,由先前的脚本调用生成的LLVM位代码文件的静态链接

目前正在Uno.Wasm.Bootstrapper in this PR中处理后者。

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

使用C ++有一些注意事项,其中需要将运行时强制包含在mono运行时的二进制文件中,从而使其变得更大。这可能很快就会改变,因为emscripten正在迁移到完整的LLVM后端。

某些文档是关于Uno.Wasm.Bootstrapper的available here