将JS ArrayBuffer或TypedArray传递给没有复制的Emscripten

Adi*_*vit 16 javascript c++ typedarray arraybuffer emscripten

我在JavaScript中有一个非常大的ArrayBuffer(或TypedArray),我想传递给emscriptened函数.我想传递原始字节而不会产生副本.

如果我的C/C++函数采用std::string如下:

void processBuffer(std::string const& buffer)
Run Code Online (Sandbox Code Playgroud)

我可以获取数据,但是IIUC,转换std::string将产生缓冲区的副本.

有没有办法在没有副本的情况下传递原始缓冲区?
我的访问权限是严格只读的.

我试过了:

void processBuffer(const char* str, size_t size);
Run Code Online (Sandbox Code Playgroud)

设置allow_raw_pointers()EMSCRIPTEN_BINDINGS,但这似乎不起作用.
我错过了什么?

Adi*_*vit 6

回答我自己。
就目前而言,没有办法允许脚本化的 C/C++ 代码访问 JS 分配的内存缓冲区。

也就是说,在使用 C API 时,通过 分配的缓冲区Module._malloc() 可以“通过指针”传递。

Embound 将添加额外的复制到 C++ 类型中。

有关详细信息,请参阅emscripten 邮件列表上的此主题。