问题标签 [n-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 回答
864 浏览

node.js - 如何使用 node-addon-api 保存回调以供以后使用?

我希望我的 C 库能够多次调用 JS 函数。我使用 Nan 让它工作,但在将其转换为 N-API/node-addon-api 时遇到了麻烦。

如何保存 JS 回调函数并稍后从 C 调用它?

这是我使用 Nan 的内容:

如何使用 node-addon-api 进行等效操作?我看到的所有示例都会立即调用回调或使用 AsyncWorker 以某种方式保存回调。我无法弄清楚 AsyncWorker 是如何做到的。

0 投票
1 回答
842 浏览

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

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

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

程序内部崩溃CallBack()

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 投票
1 回答
760 浏览

javascript - N-API C++ 插件导致 Electron GUI 阻塞

我有一个想与 Electron GUI 一起使用的 N-API C++ 插件。目前 C++ 插件有一个简单的函数,它会休眠 10 秒,然后执行 8*2 的计算,并将值返回给 Javascript 代码。Javascript 代码每 10 秒运行一次 C++ 插件。

但是,当我运行上述代码时,我发现本机 C++ 插件每次运行时都会导致 Electron GUI 阻塞 10 秒。有什么方法可以让我在后台执行繁重的计算并使 Electron GUI 不会阻塞或冻结?我假设我必须使用某种线程,但我不确定如何使用 N-API 来做到这一点。下面是我的其余文件,包括 module.cpp 和 package.json 文件。

0 投票
2 回答
1558 浏览

javascript - 使用 node-api 将数组缓冲区从 C 转发到 JS

我目前正在尝试使用 JS 进行一些低级编码。出于这个原因,我使用https://nodejs.org/api/n-api.html将自定义 C 代码添加到我的 node.js 运行时。

我得到传递值并在c中更改它们以工作,甚至读取arraybuffers并以我想要在C中的方式解释它们,但我只能返回有限的JS值(数字和字符串,如本部分所示https://nodejs .org/api/n-api.html#n_api_functions_to_convert_from_c_types_to_n_api )

有人知道如何获得 N-API 数组缓冲区吗?我想给我的 JS 一个我在 C 中定义的缓冲区,然后通过 Dataviews 工作。

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 投票
2 回答
2111 浏览

c++ - 如何从插件中的单独 C++ 线程调用发射器回调?

对于上下文,我从这个问题开始。我需要在另一个线程中调用发射器的回调。我做了一个最小的例子,但emit.Call({cb, result});我的第一直觉是我的生命周期envemit函数有问题。

插件.cpp

index.js

0 投票
0 回答
99 浏览

c++ - How to find out what module is missing with a C++ node addon

I am wondering if there's a way to get Node to provide a more useful message about which module I might be missing in a C++ n-api node addon.

Here's the error:

In this case, testaddon.node exists but it's dependent on a shared library (.dll) to run. Is there a way to debug and see what shared lib is missing?

If I add all the shared libs necessary, it works fine.

Sometimes, it's missing one and it can be tough to know which one I should be looking for.

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'”。

0 投票
1 回答
347 浏览

javascript - 从不同的节点插件方法多次调用 JS 函数

我正在尝试使用 JS 回调来初始化我的节点插件模块以进行日志记录。Initialize 方法旨在存储回调值,以便从其他方法调用。所以我使用 . 添加对回调的引用napi_create_reference

但是当我试图从我的第二个插件方法调用回调时,MyAddonMethod我收到napi_invalid_arg错误。

我试图调查这个问题。napi_typeof对回调值的调用也MyAddonMethod返回napi_invalid_arg。尽管我有强烈的参考,但看起来回调值被垃圾收集了。

我究竟做错了什么?实际上是否napi_create_reference可以防止回调对象在插件调用之间被垃圾收集?