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

Sta*_*ans 7 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。

Jer*_*ban 6

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

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

目前,此PR的Uno.Wasm.Bootstrapper 中正在处理后者。

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

使用C ++时有一些注意事项,在这种情况下,必须将运行时强制包含在mono运行时的二进制文件中,从而使其变得更大。由于emscripten正在迁移到完整的LLVM后端,所以这种情况可能很快就会改变。

此处提供了有关Uno.Wasm.Bootstrapper的一些文档。