例子1: 传递int数组给wasm

int* t;void EMSCRIPTEN_KEEPALIVE init(int* p) {       t=p;   return 1;}

调用init时,

let arrays = new Array(10).fill(0);let size = arrays.length;//ptr是偏移量,let ptr = Module._malloc(size * 4);let segment = new Int32Array(size);for (let i = 0; i < length1; i++) {     segment[i] = arrays[i];}//这里要除以4, 因为 HEAP32是32位,所以 1偏移 = 4字节Module.HEAP32.set(segment, ptr >> 2);//这里就行了Module._init(ptr)

例子2: wasm函数返回long数组

long long* t;long long* EMSCRIPTEN_KEEPALIVE call() {    return t;}

js端调用Module._call()后,返回的是数组t的地址,

let resultOffset = Module._call();//依据偏移获取内容let memory = Module.HEAPU8.subarray(resultOffset, resultOffset)//尝试了一下,间接用memory.buffer初始化DataView,会导致获取不到数据,所有从新创立了一个Uint8Array保留后果let resultLenth = 返回数组长度let arrayBuffer = new Uint8Array(resultLenth);for (let i = 0; i < resultLenth; i++) {    arrayBuffer[i] = memory[i];}let dataView = new DataView(arrayBuffer.buffer, 0, resultLenth);let TopResult = new Array(返回数组长度);// 内存中数据是小端模式;i要距离8,因为一个BigInt读取8字节for (let i = 0, index = 0; i < size; i += 8, index++) {    TopResult[index] = dataView.getBigInt64(i, true)}