emscripten:如何解决UnboundTypeError
emscripten: How can I solve UnboundTypeError
我正在尝试使用emscripten构建一个使用std::vector和std::map的程序,并且编译成功。然而,当我在web浏览器(firefox/cochrome)上运行它时,UnboundTypeError被捕获。
[03:21:26.453]UnboundTypeError:由于未绑定类型:Pi
这里是c++代码和HTML文件,它使用生成的javascript代码。
test.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>>());
}
test.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++--绑定test.cpp-o test.js
我该如何解决这个问题?谢谢你的帮助!
如果您总是提前知道数组的大小,那么可以尝试将数组作为常量引用传递。例如
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);
....
}
或者您可以使用cwrap
API,它支持指向基元类型的指针。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Ardunio UNO解决了多个重叠的定时器循环
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 两个文件使用彼此的功能-如何解决
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- visual c++,如何获取解决方案目录中的代码
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 为什么这段代码不起作用,我该如何解决?