在https://blog.csdn.net/Xeon_CC/article/details/139957190这篇文章已经直到,js文件以及对应的wasm文件如何生成了。
那么typescript怎样才能调用C++编写的函数呢?写法与js不同。
这是定义的C++函数
#include <cmath>
#include <vector>
#include <emscripten/emscripten.h>
extern "C" {
EMSCRIPTEN_KEEPALIVE
double getFloat32ArrayParam(float a, float b) {
return a + b;
}
}
我们把生成好的文件放入到typescript项目的src/lib/wasm目录下。
加载并且使用模块:
// 引入必要的类型定义
type ImportObject = WebAssembly.Imports;
// 定义C++函数的接口
interface DiluteModule {
getFloat32ArrayParam: (a: number, b: number) => number;
}
async function loadWasmModule(): Promise<DiluteModule>{
const importObject: WebAssembly.Imports = {
// 如果你的C++模块需要导入任何JavaScript函数或内存,在这里定义它们
};
// 使用fetch来获取wasm模块
const response = await fetch('src/lib/wasm/libExportDilute.wasm');
const buffer = await response.arrayBuffer();
const module = await WebAssembly.instantiate(buffer, importObject);
// 返回模块的导出函数
return module.instance.exports as unknown as DiluteModule;
}
async function useModule(){
const wasmModule = await loadWasmModule();
const result = wasmModule.getFloat32ArrayParam(74.1549615415641, 21.18798465);
console.log(result); // 输出结果
}
然后尝试调用useModule函数即可。