问题描述
我有这个C ++代码,正在使用emscripten作为WASM模块向JS公开。我的目标是公开使用原始指针(f
)作为输入的函数float* x
。我有两个版本:C ++版本(MyClass::f
)和C版本(f
),它们执行相同的操作,但是C ++版本不起作用,我怀疑缺少一些绑定代码但我还没弄清楚:
#include <emscripten.h>
#include <emscripten/bind.h>
class MyClass {
public:
static int f(float* x) {
return 1;
}
};
EMSCRIPTEN_BINDINGS(lib) {
emscripten::class_<MyClass>("MyClass")
.class_function("f",&MyClass::f,emscripten::allow_raw_pointers());
}
extern "C" int EMSCRIPTEN_KEEPALIVE f(float* x) {
return 1;
}
即使我只是在浏览器的JS控制台中使用常规int调用它,C版也能正常工作。
_f(3)
# returns 1
但是由于缺少一些绑定代码,C ++版本失败并出现错误(我猜Pf
指向浮动指针):
Module.MyClass.f(3)
结果是:
UnboundTypeError: Cannot call MyClass.f due to unbound types: Pf
我知道我不应该传递3
作为输入,但这只是为了使示例简单。 C ++版本中的错误与此无关,但显然与某些缺少的绑定代码有关。要使这项工作有效,C ++代码中缺少什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)