我正在使用emscripten生成一些Javascript,我试图弄清楚如何获得返回类型化数组的函数。我试图返回的数组是静态长度,但我有点困惑如何在JS域中处理基于指针的返回类型。
这种包装是否是做事的方式: How do I access the Emscripten typed array from javascript?
非常感谢。
答案 0 :(得分:5)
emscripten通过为堆提供一个大型ArrayBuffer来工作(假设已启用类型化数组,默认情况下它们是这样)。
模块emscripten compiles包含此单个ArrayBuffer(Module.HEAP)和堆的许多类型化ArrayBufferViews(Module.HEAPU8,Module.HEAPU32等)的属性。
如果你收到一个指向连续数组开头的指针,你可以通过这样做获取它所代表的数据的新视图(注意,我正在使用HEAP8,假设这可能是一个字符数组):
var array = Module.HEAP8.subarray(ptr, ptr+number_of_elements);
另外值得注意的是,每个类型化视图都接受基于元素的参数,而指针emscripten返回将表示到堆中的字节偏移量。所以同样的例子就是说,13个整数的数组可能是:
var array = Module.HEAP32.subarray((ptr>>2), (ptr>>2)+13);