1
호출하기 전에 알 수없는 크기의 배열 두 개를 반환하는 C/C++ 함수가 있습니다. 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 코드가 할당 할 수 있도록 'float ** verts'여야합니다 크기로 필요해. 그렇지 않으면 C로 미리 할당해야합니다. – unwind
앞서 언급했듯이 Emdript를 사용하여 JAvaScript로 컴파일 할 때 std :: vector는 호출 할 수 없습니다. 나는 C++ 코드에 대한 해결책을 찾고 싶기 때문에 C++로 태그를 붙였다. 사실 내부적으로 C++에서 ''및 다른 클래스를 사용하여 구현했지만 JS 인터페이스는 어려움이 있습니다. –