背景:
在微信小程序中使用WebAssembly中提供的功能,其中有一个功能是使用addFunction进行C和js间的通信。
错误:
在wasm生成的胶水js文件中convertJsFunctionToWasm方法中有错误:
TypeError: WebAssembly.Instance(): Argument 0 must be a WebAssembly.Module
为了方便其他同学帮忙解决该问题。已经生成代码片段,有兴趣的同学可以查看测试下,地址:https://developers.weixin.qq.com/s/KZTYGlmM7BAl
WXWebAssembly 只支持本地 wasm 路径,请尝试去掉胶水 js 中与网络请求相关的代码。
} else {
typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);
}
// Write the section code and overall length of the type section into the
// section header
typeSection = [0x01 /* Type section code */].concat(
uleb128Encode(typeSection.length),
typeSection
);
// Rest of the module is static
var bytes = new Uint8Array([
0x00, 0x61, 0x73, 0x6d, // magic ("\0asm")
0x01, 0x00, 0x00, 0x00, // version: 1
].concat(typeSection, [
0x02, 0x07, // import section
// (import "e" "f" (func 0 (type 0)))
0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,
0x07, 0x05, // export section
// (export "f" (func 0 (type 0)))
0x01, 0x01, 0x66, 0x00, 0x00,
]));
// We can compile this wasm module synchronously because it is very small.
// This accepts an import (at "e.f"), that it reroutes to an export (at "f")
var module = new WebAssembly.Module(bytes);
console.log(module);
// 在微信小程序中使用异常
var instance = new WebAssembly.Instance(module, {
'e': {
'f': func
}
});
var wrappedFunc = instance.exports['f'];
return wrappedFunc;
}
const module = new WXWebAssembly.Module(bytes);
const instance = new WXWebAssembly.Instance(module, imports);
var instance = new WebAssembly.Instance(module, {
'e': {
'f': func
}
});
的时候报:
TypeError: WebAssembly.Instance(): Argument 0 must be a WebAssembly.Module
const instance = await WXWebAssembly.instantiate(module, imports);