首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JavaScript .wasm模块获取.wasm导入对象条目

从JavaScript .wasm模块获取.wasm导入对象条目
EN

Stack Overflow用户
提问于 2017-06-08 19:26:58
回答 1查看 1.4K关注 0票数 4

我想了解一个Rust程序在编译到一个wasm文件时实际导出了什么,这样我就可以为实例化函数提供一个有效的importObject

代码语言:javascript
复制
WebAssembly.instantiate(bufferSource, importObject);

据我所知,实现此目的的唯一方法是导出编译代码的s-语法(如文件)。我无法在他们的文档或网络搜索中找到如何做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-09 04:05:12

您可以使用像瓦布特wasm2wast这样的工具将.wasm文件转换为等效的.wast,这样可以满足您的要求。

但是,您不一定需要这样做!JavaScript API提供了您想要的大部分内容:

代码语言:javascript
复制
let arrayBuffer = ...; // Somehow get your .wasm file into an ArrayBuffer. XHR, from a string, or what have you.
let module = WebAssembly.Module(arrayBuffer); // This is the synchronous API! Only use it for testing / offline things.

let importObject = {};
for (let imp of WebAssembly.Module.imports(module)) {
    if (typeof importObject[imp.module] === "undefined")
        importObject[imp.module] = {};
    switch (imp.kind) {
    case "function": importObject[imp.module][imp.name] = () => {}; break;
    case "table": importObject[imp.module][imp.name] = new WebAssembly.Table({ initial: ???, maximum: ???, element: "anyfunc" }); break;
    case "memory": importObject[imp.module][imp.name] = new WebAssembly.Memory({ initial: ??? }); break;
    case "global": importObject[imp.module][imp.name] = 0; break;
    }
}

请注意,表和内存的初始/最大是当前猜测!我建议我们将缺失的信息添加到JS中。我认为,在下一次WebAssembly会议上讨论这一增加可能是一个很好的时机。

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

https://stackoverflow.com/questions/44444050

复制
相关文章

相似问题

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