当前位置: 首页 > news >正文

JS如何调用wasm

1.生成wasm文件
const fs = require("fs");
const wabt = require("wabt")(); // 注意 () 表示初始化(async () => {const wabtModule = await wabt;const wat = `
(module(func (export "add") (param i32 i32) (result i32)local.get 0local.get 1i32.add))
`;// 把 WAT 转换成二进制 WASMconst parsed = wabtModule.parseWat("add.wat", wat);const { buffer } = parsed.toBinary({});fs.writeFileSync("add.wasm", Buffer.from(buffer));console.log("✅ 已生成 add.wasm");
})();
2.JavaScript 调用wasm文件
const fs = require("fs");async function init() {// 1. 读取 .wasm 文件const bytes = fs.readFileSync("add.wasm");// 2. 编译并实例化const { instance } = await WebAssembly.instantiate(bytes);// 3. 调用导出的函数console.log("2 + 3 =", instance.exports.add(2, 3));
}init();
3.wasm调用JavaScript

在实例化传入importObject

const fs = require("fs");
const wabt = require("wabt"); // 确保已安装:npm install wabt// 完整的异步执行函数
async function runWasm() {// 1. 初始化 wabt(关键:2.x+ 版本返回的是对象,需解构出 parseWat)const { parseWat } = await wabt();// 2. 定义 WAT 文本(WebAssembly 文本格式)const wat = `(module;; 导入 env.log 函数(接收 i32 参数)(import "env" "log" (func $log (param i32)));; 导出 run 函数(供 JS 调用)(func (export "run")i32.const 42  ;; 压入常量 42 到栈call $log     ;; 调用导入的 log 函数))`;// 3. 转换 WAT -> 二进制 WASM(修复核心:用解构出的 parseWat 函数)const parsed = parseWat("module.wat", wat, {// 可选配置:启用 WebAssembly 标准特性exceptions: false,mutable_globals: true,sat_float_to_int: true,sign_extension: true,});// 4. 生成 WASM 二进制文件const { buffer } = parsed.toBinary({});fs.writeFileSync("module.wasm", Buffer.from(buffer));console.log("✅ module.wasm 已生成");// 5. 定义导入对象(给 WASM 提供 JS 环境的函数)const importObject = {env: {log: (num) => console.log("WASM 调用 log 函数:", num),},};// 6. 读取 WASM 二进制并实例化const wasmBytes = fs.readFileSync("module.wasm");const { instance } = await WebAssembly.instantiate(wasmBytes, importObject);// 7. 调用 WASM 导出的 run 函数instance.exports.run(); // 输出:WASM 调用 log 函数: 42
}// 执行函数并捕获错误
runWasm().catch((err) => {console.error("执行失败:", err);
});
http://www.dtcms.com/a/615719.html

相关文章:

  • WGCLOUD监控系统使用指南 - 告警消息整理完整版
  • 吕梁seo网站建设织梦网站app生成器
  • 易语言模块反编译 | 深入剖析反编译技术的应用与挑战
  • 网站推广的方法枫子wordpress插件关闭更新
  • 完全平方数(二)
  • 网站软文标题wordpress 配置邮箱
  • 阿尔及利亚网站后缀建设工程价款结算暂行办法
  • 前端做网站如何调接口开发公司工程部管理制度
  • 在哪个网站做视频可以赚钱北京人才招聘网站
  • 唐山中小企业网站制作长沙电商运营培训
  • 领地网怎么编辑个人网站php制作公司网站首页
  • ui设计的网站做暧暖ox免费视频网站
  • 90设计网站终身会员文化市场经营主体
  • 网站建设教程学校品牌设计公司排行榜
  • 做公司网站的资料怎么做根优酷差不多的网站
  • 网站建站 宝郑州那个公司做网站好
  • 平台网站建设有哪些方面工业产品设计工资
  • 如何用微信打开微网站牙科 网站建设方案
  • 网站免费正能量直接进入网上备案查询
  • 广州市广园路建设公司网站2017wordpress整站源码
  • 网站建设条例免费微信网站模板下载工具
  • 医院BA楼宇自控系统软硬件一体化
  • 谷歌怎么做公司网站外语人才网官网
  • 上海做网站的公司秦皇岛网站建设
  • 汇编语言编译器 | 高效开发汇编程序的工具与技巧
  • 北京网站建站公百度成都分公司
  • 网站开发(定制)合同 模板谷歌浏览器下载安卓版
  • 最好用的网站推广经验莱芜网站建设费用
  • nvm | node | 同时开多个项目,用 nvm use 切换不同 node 版本
  • 中国建设银行黄冈分行网站金属材料东莞网站建设