问题描述
void* EMSCRIPTEN_KEEPALIVE InitializeLibrary(){
SomeStruct s;
s.k = 18;
s.t = 21;
return (void*)&s;
}
和函数在顺序调用中将上述返回的结构/指针用作SDK / API。对于相同的示例Il,只需创建一个像这样的简单函数
int EMSCRIPTEN_KEEPALIVE Add(void* b){
SomeStruct* bg = (SomeStruct*)b;
return bg->k + bg->t;
}
问题,使用Module.ccall或cwrap,如何指定函数返回值和/或函数参数是否为void *?
谢谢。
后期编辑,也许这不仅是void *,而且还会返回结构指针,并将其作为参数传递回函数。
解决方法
JavaScript的C指针类型是数字。
var arg = Module.ccall('InitializeLibrary','number',[]);
var result = Module.ccall('Add',['number'],[arg]);
console.log({arg,result});
返回指向本地变量的指针无效。
void* EMSCRIPTEN_KEEPALIVE InitializeLibrary(){
SomeStruct* s = malloc(sizeof(SomeStruct));
s->k = 18;
s->t = 21;
return (void*)s;
}