javascript - 我如何获取从wasm(rust)到js的静态mut的地址?

标签 javascript rust webassembly wasm-bindgen

我有一个rust-wasm项目,我需要在webassembly中填充一个缓冲区,然后再将其传递给我的js脚本,然后用 Canvas 显示它。
(灵感来自this article)

static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];
但是使用rust 的静态mut是不安全的,因此我无法使用#[wasm_bindgen]声明它
如何在我的js脚本中获取此静态缓冲区的地址?
编辑 :
我已经看到了以下解决方案:
const { instance } = await WebAssembly.instantiateStreaming(
          fetch("./demo.wasm")
        );

const buffer_address = instance.exports.BUFFER.value;
我不太了解这段代码中发生了什么,并且
我无法使用它,因为我使用了wasm-pack构建工具:它为我创建了与wasm文件相对应的.js文件,但我仍然无法获得Buffer地址。
任何帮助,将不胜感激

最佳答案

您的链接文章使用#[no_mangle],这会使BUFFER导出。

#[no_mangle]
static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];
然后可以通过BUFFER在实例上找到导出的instance.exports.BUFFER.value;

关于javascript - 我如何获取从wasm(rust)到js的静态mut的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64251331/

相关文章:

javascript - 用不同颜色突出显示单元格

rust - 调用从 map 方法返回Result <_,_>的函数

rust - 如何解析基于 LLVM MCJIT 的 JIT 中的当前进程符号?

javascript - Fullcalendar events.php 不返回 JSON 对象

php - 在 PHP 中包含/需要一次

javascript - 在 JavaScript 中将对象键与新数组中的累积值分组

opengl - 在 Rust 中,你如何明确地将两个对象的生命周期联系在一起,而不相互引用?

c# - 在 Blazor WebAssembly 中调整图像大小 (jpg)?

javascript - 如何处理音频流

io - WebAssembly 可以返回什么?