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

Can C++ be called from C# compiled to wasm?

本文关键字:调用 wasm 编译 C++      更新时间:2023-10-16

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

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

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

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

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

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

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

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

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

一些文档是关于Uno.Wasm.Bootstrapper的,可以在这里找到。