问题标签 [node-addon-api]

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 回答
842 浏览

node.js - 如何异步使用 node-addon-api 的 AsyncContext

的文档AsyncContext有这个同步工作的示例(仅稍作修改,但仍然有效):

我想知道如何异步使用它 - 这是我最新的镜头:

程序内部崩溃CallBack()

0 投票
1 回答
631 浏览

node.js - 是否可以使用通用调试器(gdb、lldb 等)在电子应用程序中调试 node c++ 插件?

我正在尝试调试在电子应用程序中调用的节点插件,但我找不到启动或将 c 调试器附加到应用程序的方法。当它被一个简单的节点应用程序调用时,我已经成功调试它,通过在启动调试器时调用节点,将 js 文件作为参数传递(我使用了本教程:https ://medium.com/@atulanand94/debugging- nodejs-c-addons-using-vs-code-27e9940fc3ad)。有没有办法启动电子可执行文件,以类似的方式传递应用程序的主代码(index.js)?

0 投票
1 回答
419 浏览

javascript - 如何使用 N-API 将 BigInt 类型从 C++ 返回到 javascript?

我正在使用此https://github.com/nodejs/node-addon-api/blob/master/doc/bigint.md文档作为从 c++ 返回 bigint 的参考,但出现以下错误:

这是我的源代码:

在 napi.h 中,BigInt 功能仅在 NAPI_VERSION 定义大于 2147483646 时可用。当我将 NAPI_VERSION 定义设置为高于 2147483646 的数字时,我收到以下错误消息

0 投票
0 回答
191 浏览

c++ - 如何使用 node-gyp 提供静态 C 库函数?

我尝试通过 node-gyp 和 node-addon-api 编译 node_module。编译没有错误,但我无法从静态库中公开函数。(与最终节点文件一样小于静态库 abc.a)

绑定.gyp

主文件

main.js(用于暴露对象)

0 投票
0 回答
784 浏览

javascript - node-addon-api 传递另一个类的对象作为回调函数参数

如何在 node-addon-api 中将另一个类的对象作为回调函数的参数传递?

代码片段:

在这里,我一直在尝试异步执行代码。但我无法编译代码,因为它抛出“没有匹配的成员函数调用'Call'Callback().Call(”错误。

我需要在我的 js 脚本中返回 Third_Party_Library_Method() 的返回值。有没有办法将此对象转换为通用 node-addon-api 对象?

我是 C++ 的新手,任何帮助都将不胜感激。

0 投票
0 回答
30 浏览

javascript - 从 C++ 插件函数调用中填充 HTML 选择标记

我只是不确定如何解决这个问题。我的 HTML 中有一个空白的选择标签,JS 处理点击事件。然后我构建了一个插件,它从其他来源构建一些对象,每个对象都包含一个唯一的标识字符串。

我将如何从插件中的数据中填写选择标签?

我找不到在 C++ 插件中填充它的方法,但我也想不出一种干净的方法让 Javascript 调用单个函数来完全填充它。

0 投票
1 回答
125 浏览

javascript - 从节点插件多次调用JS函数

编辑:显然不清楚,我想我会让它更简洁。

构建节点应用程序,使用本机插件。我需要通过 node-addon-api 将此项目中的 Javascript 函数传递到我的 C++ 插件中。然后,我需要能够从 C++ 多次调用该函数。当我发现由于 napi_env(调用函数所需的)受到缓存保护而无法保存对 Javascript 函数的引用时,问题就出现了。

在互联网上找不到有关如何执行此操作的任何明确答案或示例,正在寻找提示。

原来的:

正如标题所描述的,我需要想办法在我的插件中多次调用 JS 函数。通用用例是我的插件执行一些长时间运行的命令,并且需要定期将状态更新推送回 javascript。

我认为最好的方法是让用户传入一个函数(它只是附加到一个文本块)让我的插件调用(这样它就可以编写更新),这样 javascript 端可以决定它在哪里显示。

我已经尝试过让这个工作。发现我将函数保存在持久 napi_value 中的原始方法不起作用,因为您也无法保存 napi_env。

我找到了这个线程,我认为它最接近我需要的东西,但我无法将 Nan 翻译成 napi_ 所以它可以与我正在使用的东西一起使用。来自多线程 C++ 插件的回调 NodeJS Javascript 函数

还尝试传入 EventEmitter,但问题与上述类似。

如果我朝着正确的方向前进,任何人都可以给出一些指示吗?也许帮我找出一些关于如何实现这一目标的例子?

0 投票
1 回答
2309 浏览

c++ - 使用 N-API 将数据流式传输到 Node.js C++ 插件

我正在为 NodeJS 构建一个 C++ 插件,我想将数据从 C++ 异步流式传输到 Node。但是,我找到了这篇文章https://nodeaddons.com/streaming-data-into-a-node-js-c-addon/;我想使用 N-API 而不是 NAN。

我一直在搜索 NodeJS 文档和示例,以及寻找其他资源和示例,但还没有找到资源来告诉我如何实现这一点。这是我第一次为 NodeJS 编写 C++ 插件。

一个可以帮助我入门的示例是一个插件,它使用 N-API 每秒向 Node 发送一个虚拟字符串,并且 Node 会将字符串打印到控制台。

0 投票
1 回答
925 浏览

javascript - Napi::ObjectWrap: 是一个析构函数,如何调用?

多亏了node-addon-api ,我正在为 node.js 构建一个插件。

我的每个“传统”C++ 类都包装了一个 C 对象。然后我的 Napi::ObjectWrap 类包装这些 C++ 对象。

MyObjectWrapper 实例包含对 MyObject 实例的引用,其中包含对 my_object 实例的引用。由于需要释放 C 对象,我认为 MyObject 的析构函数可以完成这项工作,但包装器从未调用过它。

我对 node-addon-api 还很陌生,我不确定是否理解需要的垃圾收集器。

我想知道的是包装器何时以及如何被销毁,以及将 null 传递给 Javascript 端的对象是否有任何影响。对此的任何线索将不胜感激。

0 投票
2 回答
1542 浏览

node.js - 如何使用 InstanceMethod() 包装返回对象的方法?

致力于创建一个将返回Object节点环境的附加组件。基于Atul Anand 在 C++ 中对 N-API 的介绍,我将类对象的方法封装在InstanceMethod()其中以公开它们;但该函数需要一个返回 a 的方法Napi::Value。我无法弄清楚将 C++ 指针转换为Value; Value::From(env, ptr)错误(Visual C++ 2017)与“无法从'初始化列表'转换为'Napi::Value'”。