3

我正在使用 emscripten 生成一些 Javascript,并且试图弄清楚如何获取返回类型化数组的函数。我试图返回的数组是静态长度的,但我有点困惑如何在 JS 领域处理基于指针的返回类型。

这种包装器是做事的方式吗: 如何从 javascript 访问 Emscripten 类型数组?

非常感谢。

4

1 回答 1

5

emscripten 通过为堆设置一个大的 ArrayBuffer 来工作(假设启用了类型化数组,默认情况下它们是启用的)。

emscripten 编译的模块包含此单个 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);
于 2013-08-13T07:07:00.810 回答