如何使用通过emscripten输入到javascript的原始指针公开C ++函数

问题描述

我有这个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 (将#修改为@)