我有一个C / C ++函数,它返回两个数组,每个数组的大小在调用之前是未知的。我需要从JavaScript调用此函数。 (为简单起见,在示例中返回一个数组)。
extern "C" {
void produce_object_3d(float* verts, int *num_verts);
}
请注意,JavaScript不知道std::vector
和boost: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);
效率不高。如果结果的大小很大并且没有预先分配足够的内存呢?
答案 0 :(得分:0)
对于您的特定情况,使用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()
等方法