首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组从JS传递到AssemblyScript

将数组从JS传递到AssemblyScript
EN

Stack Overflow用户
提问于 2022-07-15 01:24:38
回答 1查看 139关注 0票数 0

我最近开始尝试将WebAssembly添加到我正在开发的应用程序中,但似乎遇到了一些麻烦。我一直得到两个错误中的一个:内存访问没有绑定或无法访问。我试图将长度为128的Float32Array发送到wasm模块,但它无法工作。下面是我使用的代码的一个示例:

zero.ts:

代码语言:javascript
复制
export function zero(arr: number[], length: number): number[] {
    for (var i = 0; i < length; i++) {
        arr[i] = 0;
    }
    return arr;
}

并使用以下终端命令进行编译:

asc zero.ts -o zero.wasm

然后在AudioWorkletNode中使用它,如下所示:

代码语言:javascript
复制
//wasmBytes is passed in form the main thread

var mod;
var importObject = {};
WebAssembly.instantiate(wasmBytes, importObject).then((instance) => {
  mod = instance.instance.exports;
            
  var f = new Float32Array(mod.memory.buffer, 0, arr.length);
  f.set(arr);
  var x = mod.zero(f.byteOffset, arr.length);
});

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-07-15 06:45:37

WebAssembly只能通过js边界传递数字。这就是为什么像数组这样的运行时对象被管理的原因。每一种可以编译成WebAssembly的语言都有自己的结构&用于表示数组、字符串等的内存布局。编码和解码这些结构通常并不简单,所以有一些工具可以实现这一点。AssemblyScript,因为0.20.x版本也可以这样做。您需要两样东西--添加--exportRuntime--bindings esm标志。您可以在文档中阅读更多有关它的内容:https://www.assemblyscript.org/compiler.html#host-bindings

我也推荐这个视频:https://www.youtube.com/watch?v=H1O2j4w78j8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72988159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档