繁体   English   中英

如何在Enscripten中返回未知大小的数组?

[英]How to return an array of unknown size in Enscripten?

我有一个C / C ++函数,它返回两个数组,每个数组的大小在调用之前是未知的。 我需要从JavaScript调用此函数。 (为简单起见,在示例中返回一个数组)。

extern "C" {
  void produce_object_3d(float* verts, int *num_verts);
}

请注意,JavaScript不知道std::vectorboost:array以及其他类型。 我目前预先分配一些空间,但它不起作用。 这是JavaScript方面的代码:

var verts_address = Module._malloc(FLOAT_SIZE*3*max_verts);
var nv_address = Module._malloc(INT_SIZE*1);
//
produce_object_3d (verts_address, nv_address);
//
var nverts = Module.HEAPU32[nv_address/INT_SIZE];
var verts = Module.HEAPF32.subarray(verts_address/FLOAT_SIZE, verts_address/FLOAT_SIZE + 3*nverts);

这效率不高。 如果结果的大小很大并且预分配的内存不足,该怎么办?

对于您的特定情况,使用embind是一个更好的选择。 根据官方文档

为方便起见,embind提供了工厂函数来注册std :: vector(register_vector())和std :: map(register_map())类型:

 EMSCRIPTEN_BINDINGS(stl_wrappers) { register_vector<int>("VectorInt"); register_map<int,int>("MapIntInt"); } 

返回的对象具有.get()和.size()等方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM