我正在尝试将值从 JavaScript 传递到 WASM,但它不起作用。这是我的 C 代码:
extern int x;
int foo() {
return x;
}
在 JavaScript 中,我实例化模块并将 x 设置为 5:
var importObj = {
env: {
memory: new WebAssembly.Memory({initial: 256, maximum: 256}),
_x: 5
}
};
WebAssembly.instantiateStreaming(fetch('test.wasm'), importObj)
.then(result =>
console.log('Output: ' + result.instance.exports._foo())
);
这不会产生任何错误,但记录的消息Output: 0
不是Output: 5
. 有任何想法吗?
你用什么把你的 C 代码编译成 wasm?我试图让它在https://webassembly.studio上工作,发现该函数foo
从内存位置加载值0
。所以我能够Output: 5
通过从 JS 初始化实例内存来产生:
WebAssembly.instantiateStreaming(fetch('test.wasm'), importObj)
.then(result => {
const mem = new Uint32Array(result.instance.exports.memory.buffer)
mem[0] = 5
console.log('Output: ' + result.instance.exports._foo())
});
老实说,我希望extern int x
成为wasm 中的导入全局变量,可以通过importObj
. 我希望这仍然有助于走上正确的道路。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句