webassembly - 如何通过emscripten向javascript公开带有原始指针输入的C++函数
问题描述
我有这个 C++ 代码,我使用 emscripten 作为 WASM 模块向 JS 公开。我的目标是公开一个f
以原始指针 ( float* x
) 作为输入的函数。我有两个版本:一个 C++版本MyClass::f
(f
#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;
}
C 版本有效,即使我只是在浏览器的 JS 控制台中使用常规 int 调用它。
_f(3)
# returns 1
但是由于缺少一些绑定代码(我猜Pf
是指指向浮点的指针),C++ 版本失败并出现错误:
Module.MyClass.f(3)
这导致:
UnboundTypeError: Cannot call MyClass.f due to unbound types: Pf
我知道我不应该3
作为输入传递,但这只是为了保持示例简单。C++ 版本中的错误与此无关,而显然与某些缺少的绑定代码有关。C++ 代码中缺少什么来完成这项工作?
解决方案
推荐阅读
- ios - AppStore Connect - 二进制被拒绝 - 性能 - 应用程序完整性
- python - 如何在python中合并具有不同数据类型的相同值的数据帧
- scala - Scala/Spark 删除基于其他列特定值的重复项
- swift - 以编程方式切换UITabBarController Swift iOS时不出现安全区域
- android - 在 Android Studio 中生效的评论
- ios - YTPlayerView 控件设置不影响全屏模式
- xml - 如何使用 XSLT 附加到 xml 标记的值?
- java - 有没有一种方法可以直接将 XML 转换为 JSON 并删除命名空间,而无需任何中间 XML 到 XML 的转换?
- hadoop - apache pig latin 中的字数统计程序
- java - SpringBoot不同的连接池到同一个数据库