c代码:
#include<emscripten/emscripten.h> #include<stdlib.h> typedef struct { unsigned char * str; int a; double c; }data; data d = {(unsigned char *)"我是字符串",111,3.141592634571}; data* EMSCRIPTEN_KEEPALIVE getData(){ return &d; }
emscripten编译命令
emcc main.c -s WASM=1 -s MODULARIZE=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=["UTF8ToString"] -s EXPORT_NAME="WasmModule" -s ENVIRONMENT=web -o index.js
js调用代码
WasmModule().then(mod => { //sPtr 是结构体的指针 let sPtr = mod._getData(); //mod.HEAP32[sPtr >> 2] 取到字符串的地址 //mod.UTF8ToString 把c串地址转化为js字符串 console.log(mod.UTF8ToString(mod.HEAP32[sPtr >> 2])); //HEAP32代表int类型占四字节 所以下面需要加4 并且取到int类型的值 console.log(mod.HEAP32[sPtr + 4 >> 2]); //mod.HEAPF64 代表double类型 取结构体第三个数据 地址需要加上第一个与第二个值得字节数所以加8 console.log(mod.HEAPF64[sPtr + 8 >> 3]); })
结果输出: