小编Mog*_*shu的帖子

将客户端文件从前端传递到Webassembly

我希望将用户提交的数据传递给已编译为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而不是传递所有数据。我的问题是,我只是不太了解所有这些工作原理。有人可以解释吗?

html javascript c++ webassembly

5
推荐指数
2
解决办法
1941
查看次数

标签 统计

c++ ×1

html ×1

javascript ×1

webassembly ×1