用Emscripten编译C++到WASM后,如何正确导出和调用带std::string参数的函数?
我用Emscripten把一段C++代码编译成WASM,里面有个函数接收std::string参数,但在JS里调用时总是报错或者传参不对。查了文档说要处理内存分配,但具体该怎么做?
我的C++函数大概是这样的:
#include <string>
extern "C" {
void processText(std::string input) {
// 处理字符串
}
}
编译命令用了emcc -O2 --bind -s EXPORTED_FUNCTIONS='["_processText"]',但JS里不知道怎么传字符串进去,直接传JS字符串会崩溃。
C++代码改成这样:
编译命令:
不需要再手动写EXPORTED_FUNCTIONS了,--bind会帮你处理。
JS调用:
如果你坚持不用embind,想直接操作内存也行,但得这么搞:
C++保持原样,编译时去掉--bind:
JS端手动分配内存传过去:
但这种写法容易漏内存,个人建议直接用embind,省心。