评论

wasm线性内存使用

wasm线性内存使用

wasm线性内存使用源码

wasm源码

引入打印函数,引入线性内存,定义字符串"Hi",wasm导出函数writeHi,传递给打印函数内存内容,并进行打印。
这里的难点在js函数,可参考下面小程序中的源码。

(module
  (import "console" "log" (func $log (param i32 i32)))
  (import "js" "mem" (memory 1))
  (data (i32.const 0) "Hi")
  (func (export "writeHi")
    i32.const 0  ;; pass offset 0 to log
    i32.const 2  ;; pass length 2 to log
    call $log)
	)

小程序调用

定义全局变量
let inst;

将编码js文件下载,需要lib下面的两个文件(encoding.js,encoding-indexes.js),放入到小程序要引用的目录内。该js下载地址为
https://github.com/inexorabletash/text-encoding

引入编码js,
var encoding = require("encoding.js")

上面的编码js文件如果不引入,在真机上会出现错误,TypeError: TextDecoder is not a constructor。

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

  loadWasm(){
    var memory = new WXWebAssembly.Memory({
      initial: 1
    });
    var importObj = {
      console: {
        log: function consoleLogString(offset, length) {
          var bytes = new Uint8Array(memory.buffer, offset, length);
          var string = new encoding.TextDecoder('utf8').decode(bytes);
          wx.showToast({
            title: string,
          })
          console.log(string);
        },
      },
      js: {
        mem: memory
      }
    };
    WXWebAssembly.instantiate("/wasm/logstr.wasm", importObj).then(
      (result) => {
        console.log("初始化成功");
         inst = result.instance.exports;
       
      },
      (err) => {
        console.log("初始化失败", err);
      }
    );
  },

调用wasm的函数

callWasm() {
     inst.writeHi();
  },

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

最后一次编辑于  2022-09-04  
点赞 0
收藏
评论
登录 后发表内容