1
私は呼び出し前に不明なサイズの2つの配列を返すC/C++関数を持っています。 JavaScriptからこの関数を呼び出す必要があります。 (簡単にするために、この例では1つの配列が返されます)。 JavaScriptがstd::vector
とboost:array
および他のタイプを知らないことをEnscriptenで不明なサイズの配列を返すには?
extern "C" {
void produce_object_3d(float* verts, int *num_verts);
}
注意。私は現在、いくつかのスペースをあらかじめ割り当てていますが、動作しません。 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);
これは効率的ではありません。また、結果のサイズが大きく、十分なメモリがあらかじめ割り当てられていない場合はどうなりますか?
を持つCインタフェースはあなたが記述ように動作しますCのコードは、それを割り当てることができるように、それは 'フロート** verts'でなければならないこと方法はありませんサイズでが必要だ。それ以外の場合は、Cであらかじめ割り当てる必要もあります。 – unwind
私が言及したように、Emdriptを使用してJAvaScriptにコンパイルされると、std :: vectorは呼び出し可能ではありません。私はC++としてタグ付けしました。なぜなら、私のC++コードのためのこれらのソリューションを探したいからです。私は実際には内部的に ''と他のクラスを使ってC++で実装しましたが、難しかったのはJSインタフェースでした。 –