可以从编译为 wasm 的 C# 调用 C++ 吗?
Can C++ be called from C# compiled to wasm?
有谁知道目前是否可以从编译为 wasm(或更准确地说是 Uno Platform 应用程序)的 C# 调用 C++?
我是 WebAssembly 的新手,但我设法将 C++ 函数编译为 wasm 并从 JavaScript 调用它。
我还从 Uno 获得了快速启动项目(它允许您将用 C#/XAML 编写的 UWP 应用程序编译为 wasm 并在浏览器中 运行 它们)运行ning.
我每天都写 C# 和 C++,但我想不通的是 "interopping between 2 languages" + WebAssembly 组合。
我假设我需要将两种语言的代码编译为 2 个单独的 wasm 文件,然后以某种方式将它们 link 在一起,或者在 运行 时加载 C++ 文件。
今天我想做的事有可能吗?
编辑:明确一点:想法是所有代码最终都编译为 wasm。
P/Invoke 自上个月以来由 mono-wasm 运行时支持,使用两种模式:
- Dynamic linking 任意 WebAssembly 模块,当 运行 单声道解释器
- 当 运行 在 mono 的 AOT
下时,由先前的 emscripten 调用生成的 LLVM 位码文件的静态链接
后者目前正在 Uno.Wasm.Bootstrapper in this PR 中处理。
它与另一个 .NET 运行时可能具有完全相同的行为,这意味着无法直接访问 C++,您必须公开 C API 才能使用它。
使用 C++ 有一些注意事项,其中运行时需要强制包含在单声道运行时的二进制文件中,使其更大。这可能很快就会改变,因为 emscripten 正在转向完整的 LLVM 后端。
一些文档是针对 Uno.Wasm.Bootstrapper 的 available here。
有谁知道目前是否可以从编译为 wasm(或更准确地说是 Uno Platform 应用程序)的 C# 调用 C++?
我是 WebAssembly 的新手,但我设法将 C++ 函数编译为 wasm 并从 JavaScript 调用它。 我还从 Uno 获得了快速启动项目(它允许您将用 C#/XAML 编写的 UWP 应用程序编译为 wasm 并在浏览器中 运行 它们)运行ning.
我每天都写 C# 和 C++,但我想不通的是 "interopping between 2 languages" + WebAssembly 组合。 我假设我需要将两种语言的代码编译为 2 个单独的 wasm 文件,然后以某种方式将它们 link 在一起,或者在 运行 时加载 C++ 文件。 今天我想做的事有可能吗?
编辑:明确一点:想法是所有代码最终都编译为 wasm。
P/Invoke 自上个月以来由 mono-wasm 运行时支持,使用两种模式:
- Dynamic linking 任意 WebAssembly 模块,当 运行 单声道解释器
- 当 运行 在 mono 的 AOT 下时,由先前的 emscripten 调用生成的 LLVM 位码文件的静态链接
后者目前正在 Uno.Wasm.Bootstrapper in this PR 中处理。
它与另一个 .NET 运行时可能具有完全相同的行为,这意味着无法直接访问 C++,您必须公开 C API 才能使用它。
使用 C++ 有一些注意事项,其中运行时需要强制包含在单声道运行时的二进制文件中,使其更大。这可能很快就会改变,因为 emscripten 正在转向完整的 LLVM 后端。
一些文档是针对 Uno.Wasm.Bootstrapper 的 available here。