我有许多JS中的大数组,我想将它们传递给C++进行处理。
在我看来,最有效的方式是让JS直接写入C++堆,并通过直接调用传递指针作为参数,例如:
var size = 4096,
BPE = Float64Array.BYTES_PER_ELEMENT,
buf = Module._malloc(size * BPE),
numbers = Module.HEAPF64.subarray(buf / BPE, buf / BPE + size),
i;
// Populate the array and process the numbers:
parseResult(result, numbers);
Module.myFunc(buf, size);
C++处理数字的函数如下:
```cpp ```
void origFunc(double *buf, unsigned int size) {
// process the data ...
}
void myFunc(uintptr_t bufAddr, unsigned int size) {
origFunc(reinterpret_cast<double*>(bufAddr), size);
}
这个代码可以正常工作,但我想知道是否有可能直接从Javascript中调用origFunc
来摆脱myFunc
和丑陋的reinterpret_cast
。
当我尝试通过以下方式绑定origFunc时:
EMSCRIPTEN_BINDINGS(test) {
function("origFunc", &origFunc, emscripten::allow_raw_pointers());
}
...并直接调用它:
Module.origFunc(buf, size);
我遇到了这个错误:
Uncaught UnboundTypeError: 由于未绑定类型,无法调用origFunc:Pd 这是emscripten的一般限制吗?还是有比reinterpret_cast解决方法更好的“不那么脏”的解决方案?
buf / BPE
传递到函数之前修改了其位置。我怀疑应该是buf
。而且可能函数的大小参数应该只是size * BPE
。 - NiallPd
,但是代码片段中没有Pd
,那么Pd
是什么? - Niall