试图让asm.js返回一个类型化的数组

mea*_*ppl 3 emscripten asm.js

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

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

非常感谢.

ino*_*len 5

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

模块emscripten compiles包含此单个ArrayBuffer(Module.HEAP)和堆的许多类型化ArrayBufferViews(Module.HEAPU8,Module.HEAPU32等)的属性.

如果你收到一个指向连续数组开头的指针,你可以通过这样做获取它所代表的数据的新视图(注意,我正在使用HEAP8,假设这可能是一个字符数组):

 var array = Module.HEAP8.subarray(ptr, ptr+number_of_elements);
Run Code Online (Sandbox Code Playgroud)

另外值得注意的是,每个类型化视图都接受基于元素的参数,而指针emscripten返回将表示到堆中的字节偏移量.所以同样的例子就是说,一个包含13个整数的数组可能是:

 var array = Module.HEAP32.subarray((ptr>>2), (ptr>>2)+13);
Run Code Online (Sandbox Code Playgroud)

  • 我不太了解教程,但订阅邮件列表是一个很好的方式来关注项目https://groups.google.com/forum/#!forum/emscripten-discuss (2认同)