问题标签 [embind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2564 浏览

emscripten - 使用 2D 双数组绑定类时出现 Emscripten 错误

我确信对此必须有一个简单的答案,但我在文档中或通过一些初步的谷歌搜索找不到任何参考。

基本上,我有一个看起来像这样的类:

还有其他使用的函数和变量,但它们都不会在 JavaScript 中直接调用。

现在,我想我们 embind 以便我可以创建我的对象并执行以下操作:

所以,很自然,我会做这样的事情:

这些是我的吸气剂和二传手

然后有这些错误:

那么有谁知道如何在 emscripten 中处理双数组?我真的希望我没有错过部分文档。如果我没有,这确实需要包含在嵌入页面中。

另外,我为任何不一致的地方道歉。这不是一个复杂的问题(表面上)。我只是不知道该怎么办。

0 投票
1 回答
2445 浏览

javascript - 使用 emscripten embind 在 C++ 中调用 javascript 函数

这个问题分为两部分。我想要做的是将我的大部分程序逻辑放在 c++ 类中,并将一些与视图相关的函数放在 js 中(如 DOM 操作和样式。)我使用 emscripten 嵌入类,它工作正常,而我不知道如何交互使用 hte js 代码(他们的教程中的资源非常有限。)

我正在考虑根据他们的教程(https://github.com/kripken/emscripten/wiki/Tutorial)将 val 对象传递给 c++ 类,传递工作得很好,而“调用”函数不起作用。我得到一个编译时错误

这是我尝试过的示例,他们将其放在教程中

我收到以下错误:错误:没有匹配的成员函数调用'call' Math.call("abs",-10); ~~~~^~~~ emscripten/1.5.6/system/include/emscripten/val.h:247:21: 注意:候选模板被忽略:无法推断模板参数'ReturnValue' ReturnValue call(const char* name , args&&... args) const {

基本上它说编译器不知道“调用”函数的返回类型。我做错了什么还是有更好的方式与 js 代码交互?

谢谢,易

0 投票
1 回答
884 浏览

javascript - Emscripten,Embind,错误:没有构造函数实例

我正在尝试使用 Emscripten 将类(和结构)从 C++ 转换为 Javascript。为此,我想使用 Embind。我正在尝试转换一个非常简单的示例,但即使使用此示例,我也会遇到错误。我的代码:

使用此代码,它会给我一个错误:

“错误:没有构造函数实例“class_BaseSpecifier::class_[with ClassType=AddTest, >BaseSpecifier=internal::NoBaseClass]”与参数列表匹配

此处给出了使用 Embind 的示例: https ://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html#classes

我只是无法发现示例和我的代码之间的区别。

有人可以帮助我吗?

0 投票
1 回答
1087 浏览

javascript - 如何在 Emscripten 编译器中嵌入多个 cpp 文件?

我在 Main.cpp 文件中调用了两个 cpp 文件。此代码将从 ams.js 文件中调用。我正在使用 Embind 编译器从 JS 调用 WASM。

这是我的示例代码:

类.h:

类.cpp:

主要.cpp:

对于编译:

在 Render.js 中调用函数:

输出错误:

我该如何解决这个问题?

0 投票
0 回答
679 浏览

emscripten - emscripten 和动态链接:如何与 embind 链接?

我正在尝试将动态链接与 emscripten 和 embind 库一起使用。

侧模块是用构建的,-s SIDE_MODULE=1而主模块是用-s MAIN_MODULE=1. 一切都很好,直到我开始在一侧模块中使用嵌入。然后我有运行时错误,如下所述:

如果我根本不使用--bind,我会得到:
external function '_emval_get_global' is missing

现在,如果我只用 构建侧模块--bind,我会得到:
external function '_embind_register_void'

如果我只用 构建主模块--bind,我会得到
BindingError: parameter 0 has unknown type N10emscripten3valE,BindingError

如果我用 构建两个模块--bind,我得到
BindingError: Cannot register type 'void' twice

重要的 :

任何想法 ?

0 投票
1 回答
324 浏览

c++ - 如何在 C++ 类中存储 Embind 'val' - 错误:调用已删除的构造函数

我设法使用Embind val 音译来创建 Web Audio APIAudioContext并在函数中使用它。但我不明白如何将它存储起来以供以后在 C++ 类实例字段 ( mContext) 中使用。当我编译以下代码时,我得到

0 投票
1 回答
1179 浏览

javascript - 有没有更有效的方法将数组从 C++ 返回到 javascript?

要将类型化数组从 emscripten'ed C++ 传递给 javascript,我想出了这段代码

(用 构建em++ test.cpp -o test.html --bind

在这种情况下,有两个额外的副本:

  • 据我所知,从输入数组到 wasm 内存的复制是不可避免的;
  • 从 wasm 内存复制到 javascript 对象:

在第二种情况下,有没有办法避免从生成的输出到 javascript 对象的额外复制?

我知道像这样返回内存视图的可能性:

但在这种情况下,返回的对象指的是output静态对象拥有的底层内存,并会产生所有后果,比如在 C++ 端修改内存,甚至释放它。

0 投票
0 回答
224 浏览

c++ - 如何使用 emscripten embind 将 json 对象作为参数传递给 c++ 函数

我有一个带有 std::map 参数的 C++ 函数:

我想使用 json 对象从 JavaScript 调用它:

我的想法是用 C++ 编写一个包装器来转换参数:

但我没有找到如何自省em::val以迭代键/值。

有没有更简单/更好的方法来解析 c++ 绑定中的 json 参数?

0 投票
1 回答
313 浏览

javascript - 如何使用 Emscripten 和 Embind 发出的 .js 和 .wasm 工件?

我有两个相当简单的 C++ 类定义及其接口,uuid.{hpp,cpp}还有uuid_util.{hpp,cpp}一个文件uuid_bind.cpp#include <emscripten/bind.h>用于将 C++ 类、函数和静态函数定义绑定到 JavaScript。

这两个类首先构建为静态库uuid_lib.a,然后将其链接到后一个 C++ 源文件并使用em++ --bind -o uuid_module.js uuid_bind.cpp uuid_lib.a(由 CMake 生成)构建以生成uuid_module.jsuuid_module.wasm. 现在,我该怎么处理这些?

Embind 上的文档有些稀疏,只说

生成的quick_example.js文件可以作为节点模块或通过<script>标签加载:...

我找到了这个关于结合 Emscripten/Embind 和 node.js 的 Google 教程,并且我已经尽可能多地复制了它(不包括 Docker 上的位,因为我的 Linux 发行版直接为 Emscripten 服务)。我有一个文件index.html和一个package.json文件,以及从 Chrome 运行的 launch npm testhttp-server

我的印象是 Emscripten/Embind 只是充当任何绑定类、函数(静态或其他)、变量的翻译层,并且可以直接从 JavaScript 调用,但事实证明并非如此. 我在这里错过了什么吗?我对JS不是很熟悉。我想做的index.js就是:

index.js

并运行node index.js它会将 UUID 字符串打印到控制台。


对于背景,我提供了我的CMakeLists.txtuuid_bind.cpp以下。

CMakeLists.txt

uuid_bind.cpp

0 投票
2 回答
75 浏览

c++ - BindingError:将原始指针传递给智能指针是非法的

考虑以下 C++ 代码和相应的 Emscripten 绑定。

在 TypeScript 中,我有以下内容:

这里的问题是它Foo::setBar需要一个std::shared_ptrModule.Bar.implement返回一个原始指针。这阻止了我传递barFoo::setBar.

有谁知道如何在这里将原始指针转换为共享指针?或者,有人知道一个好的解决方法吗?