C++可以从编译为 wasm 的 C# 调用吗?
Can C++ be called from C# compiled to wasm?
有谁知道目前是否可以从编译到 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的,可以在这里找到。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- C++可以从编译为 wasm 的 C# 调用吗?