我希望将用户提交的数据传递给已编译为wasm的c ++函数。数据是用户通过输入标签在前端提交的文件,如下所示:
<input type="file" onChange={this.handleFile.bind(this)} />
Run Code Online (Sandbox Code Playgroud)
当前的onChange回调如下所示:
handleFile(e){
const file = e.currentTarget.files[0];
const reader = new FileReader();
reader.onloadend = evt => {
window.Module.readFile(evt.target.result);
}
reader.readAsArrayBuffer(file);
}
Run Code Online (Sandbox Code Playgroud)
最后,包含readFile函数的.cpp文件如下所示:
void readFile(const std::string & rawString){
std::vector<uint8_t> data(rawString.begin(), rawString.end());
//...
}
EMSCRIPTEN_BINDINGS(my_module) {
emscripten::function("readFile", &readFile);
}
Run Code Online (Sandbox Code Playgroud)
我花了一个下午的时间阅读各种文档,因此我知道应该为堆上的这些文件分配内存,然后将ptr从js传递到readFile而不是传递所有数据。我的问题是,我只是不太了解所有这些工作原理。有人可以解释吗?