gpt4 book ai didi

javascript - emscripten:如何解决 UnboundTypeError

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:46 30 4
gpt4 key购买 nike

我正在尝试使用 emscripten 构建一个使用 std::vector 和 std::map 的程序,并且编译成功。但是,当我在网络浏览器(firefox/chrome)上运行它时,捕获了 UnboundTypeError。

[03:21:26.453] UnboundTypeError: Cannot call intArrayToVector due to unbound types: Pi

这是使用生成的 javascript 代码的 c++ 代码和 HTML 文件。

测试.cpp:

#include <vector>
#include <emscripten/bind.h>

using namespace emscripten;

std::vector<int> intArrayToVector(int* input, int num){
std::vector<int> vec;
for(int i=0; i<num; i++){
int val = *(input+i);
vec.push_back(val);
}
return vec;
}

EMSCRIPTEN_BINDINGS(test){
register_vector<int>("VectorInt");
function("intArrayToVector", &intArrayToVector, allow_raw_pointer<arg<0>>());
}

测试.html:

<html>
<body>
<script src="test.js"></script>
<script>
var num = 6;
var buf = Module._malloc(100);
var arr = new Int8Array(num);
for(var i=0; i<num; i++){
arr[i] = i+2;
}
Module.HEAP8.set(arr, buf);
var v = Module.intArrayToVector(buf, num);

for(var i=0; i<num; i++){
console.log(v.get(i));
}
Module._free(buf);
</script>
</body>
</html>

javascript 代码由以下命令生成:

$ em++ --bind test.cpp -o test.js

我该如何解决这个问题?感谢您的帮助!

最佳答案

Embind doesn't support pointers to primitive types. “Pi”的意思是“指向整数的指针”。

如果您总是事先知道数组的大小,则可以尝试将数组作为常量引用传递。例如

std::vector<int> intArrayToVector(const int (&input)[100])

或者您可以作弊并为指针使用整数参数,并使用 reinterpret_cast 将其视为指针。例如

std::vector<int> intArrayToVector(uintptr_t input, size_t len) {
const int* ptr = reinterpret_cast<int*>(input);
....
}

或者您可以使用 the cwrap API它确实支持指向原始类型的指针。

关于javascript - emscripten:如何解决 UnboundTypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355880/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com