wasm 源码

定义表格,包含 2 个函数,元素从 0 开始,定义函数类型,然后导出调用表格的函数,通过表格索引去调用具体函数。函数 1 返回 42,函数 2 返回 13。

(module
  (table 2 funcref)
  (func $f1 (result i32)
    i32.const 42)
  (func $f2 (result i32)
    i32.const 13)
  (elem (i32.const 0) $f1 $f2)
  (type $return_i32 (func (result i32)))
  (func (export "callByIndex") (param $i i32) (result i32)
    local.get $i
    call_indirect  (type $return_i32)
    )
)

小程序调用

定义全局变量 let inst;

定义加载 wasm 函数,并在 onload 中调用

  loadWasm() {
    var importObj = {

    };
    WXWebAssembly.instantiate("/wasm/wasm-table.wasm", importObj).then(
      (result) => {
        console.log("初始化成功");
        inst = result.instance.exports;
      },
      (err) => {
        console.log("初始化失败", err);
      }
    );
  },

调用 wasm 的函数,这里写了两个按钮,分别调用不同函数。

  callWasm2() {
      let i = inst.callByIndex(1);
    console.log(i); // 返回 13
    wx.showToast({
      title: ''+i,
    })
  },

  callWasm1() {
      let i = inst.callByIndex(0);
    console.log(i); // 返回 42
    wx.showToast({
      title: ''+i,
    })
  },

这样就可以了,可以在小程序五位字节码查看效果,有任何问题,欢迎提问讨论。