问题标签 [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.
node.js - 如何使用 node-addon-api 保存回调以供以后使用?
我希望我的 C 库能够多次调用 JS 函数。我使用 Nan 让它工作,但在将其转换为 N-API/node-addon-api 时遇到了麻烦。
如何保存 JS 回调函数并稍后从 C 调用它?
这是我使用 Nan 的内容:
如何使用 node-addon-api 进行等效操作?我看到的所有示例都会立即调用回调或使用 AsyncWorker 以某种方式保存回调。我无法弄清楚 AsyncWorker 是如何做到的。
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 的数字时,我收到以下错误消息
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 文件。
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 工作。
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 会将字符串打印到控制台。
c++ - 如何从插件中的单独 C++ 线程调用发射器回调?
对于上下文,我从这个问题开始。我需要在另一个线程中调用发射器的回调。我做了一个最小的例子,但emit.Call({cb, result});
我的第一直觉是我的生命周期env
或emit
函数有问题。
插件.cpp
index.js
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.
node.js - 如何使用 InstanceMethod() 包装返回对象的方法?
致力于创建一个将返回Object
节点环境的附加组件。基于Atul Anand 在 C++ 中对 N-API 的介绍,我将类对象的方法封装在InstanceMethod()
其中以公开它们;但该函数需要一个返回 a 的方法Napi::Value
。我无法弄清楚将 C++ 指针转换为Value
; Value::From(env, ptr)
错误(Visual C++ 2017)与“无法从'初始化列表'转换为'Napi::Value'”。
javascript - 从不同的节点插件方法多次调用 JS 函数
我正在尝试使用 JS 回调来初始化我的节点插件模块以进行日志记录。Initialize 方法旨在存储回调值,以便从其他方法调用。所以我使用 . 添加对回调的引用napi_create_reference
。
但是当我试图从我的第二个插件方法调用回调时,MyAddonMethod
我收到napi_invalid_arg
错误。
我试图调查这个问题。napi_typeof
对回调值的调用也MyAddonMethod
返回napi_invalid_arg
。尽管我有强烈的参考,但看起来回调值被垃圾收集了。
我究竟做错了什么?实际上是否napi_create_reference
可以防止回调对象在插件调用之间被垃圾收集?