首页 > 解决方案 > 如何通过emscripten向javascript公开带有原始指针输入的C++函数

问题描述

我有这个 C++ 代码,我使用 emscripten 作为 WASM 模块向 JS 公开。我的目标是公开一个f以原始指针 ( float* x) 作为输入的函数。我有两个版本:一个 C++版本MyClass::ff

#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++ 代码中缺少什么来完成这项工作?

标签: webassemblyemscripten

解决方案


推荐阅读