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

javascript - 将 N-API 对象读入 C++ 原语

我从 generator-napi-module 的 ObjectWrap 样板开始创建了一个简单的 N-API 模块,并成功地将数据(包含具有字符串、数字和布尔属性的对象的数组)传递给 JS。但是,我无法解析传递回本机代码的相同对象之一的属性;具体来说,uint32_t从传递对象的属性(数字)创建一个值。

假设创建了一个对象数组并将其传递给 JS:

然后将这些对象之一传递给本机函数调用:

这构建得很好,但上面的 OtherMethod()A number was expecteduint32_t temp = obj.Get('someProp').As<Napi::Number>().

如何从 JS 对象属性值创建本机 (C++) 值?

0 投票
1 回答
72 浏览

c++ - 从节点添加获取字符串参数

我正在尝试将字符串传递给 Node.js 中的 C++ 插件。我正在使用 Nan 图书馆,这似乎是推荐的。对于具有数字的等效任务,我执行以下操作:

之后我可以使用blocks变量。似乎没有任何等效StringValue功能。我已经尝试过info[0]->ToString(ctxt),但这给了我一个MaybeLocal似乎是一个空检查local。一旦我转换为v8::Local<v8::String>我不知道如何实际访问字符串值。我也尝试过info[0]->Cast,但这也不起作用。任何帮助,将不胜感激。

0 投票
1 回答
449 浏览

c++ - 如何从 NAPI(节点插件)接口读取文件并使用 nodejs 文件流写入不同的文件

我正在尝试读取 NAPI 应用程序中的文件并调用回调函数将其写入 nodejs 应用程序中的 writestream。

exmaple_Class.cpp

exmaple_Class.js

C++侧函数的限制是它不能返回值,所以数据必须在回调中返回。有趣的是,如果它是一个文本文件,它可以正常工作,但对于 zip 或 jpeg 等其他类型的文件,我会得到乱码数据。如果我将文件描述符传递给 C++ 函数并使用 UNIX 写入函数,那么我会得到该文件。但我也想使用 express 通过 HTTP 发送该数据。那么出了什么问题呢?如何正确包装和返回 NAPI 对象中的二进制数据。

0 投票
2 回答
208 浏览

c++ - 节点插件 Nan::NewBuffer 导致内存泄漏

我有一个使用 Nan 库的 c++ 节点添加。我有一个需要返回缓冲区的函数。最简单的版本如下(根据注释编辑代码):

联合只是用作重新解释字节的简单方法。根据文档, Nan::NewBuffer 承担了内存的所有权,因此无需手动释放内存。但是,当我运行使用此功能的节点代码时,我的内存猛增,即使我通过强制垃圾收集器运行global.gc();节点代码产生错误也非常简单:

任何帮助,将不胜感激。

0 投票
1 回答
239 浏览

c++ - 在节点插件中添加两个字符串参数

我试图在我的插件中添加两个字符串参数,但我无法让它工作。我总是收到关于这两个参数类型的错误。

我的功能:

整个文件:

对于任何反馈,我们都表示感谢。

0 投票
1 回答
419 浏览

c++ - 在 Node.js C++ 插件中,永远不会调用 SetWindowsHookEx 的回调

这是一个简单的 Windows C++ 键盘记录器示例

当我在 Visual Studio 中运行它时,HookCallback它被正确调用。

我想node-addon-api在 Node.js 中做同样的事情,但我不想在文件中记录按键,我想使用回调将键码值发送到 JavaScript 世界。

这是我的存储库。这就是我正在做的...

JavaScript

本国的

但是,在我的情况下HookCallback,永远不会调用(HookCallback is called永远不会打印消息),当我点击键盘时,点击速度会减慢,并且由于某种原因我遭受了非常明显的滞后。

更新:根据LowLevelKeyboardProc文档:“这个钩子是在安装它的线程的上下文中调用的。调用是通过向安装钩子的线程发送消息来进行的。因此,安装钩子的线程必须有一个消息循环。

我试图GetMessage像这样调用循环

但这会阻塞 JavaScript 线程。此外,当现在按下键盘按钮时,HookCallback is called实际上会打印调试消息,但随后在这一行发生崩溃while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)......

0 投票
1 回答
163 浏览

node.js - nodejs napi 如何手动创建 CallbackInfo 类型的数据

我想调用一些已有的函数,但是函数需要CallbackInfo参数,如何初始化一个CallbackInfo

0 投票
0 回答
147 浏览

node.js - 未定义符号:napi_module_register

我一直试图让一个节点库与 Electron 一起编译和运行。Tbh,我对 node-addon-api 的了解非常有限,我可能错过了文档中的某个关键点。

我可以安装和构建库,尽管我需要手动将 node_api.h 和 node_api_types.h 头文件添加到项目中。我也可以毫无错误地运行电子重建。但是,当我运行代码时,Electron 会抛出一个“未定义的符号:napi_module_register”错误。

napi_module_register 包含在 node_api.h 文件中。因此,如果库编译,它应该已经被定义。我显然在这里遗漏了一些东西。有什么提示可以解决这个问题吗?

兄弟,阿列克西

0 投票
1 回答
91 浏览

c++ - 来自本机 C++ 代码的节点 js 回调抛出错误

我正在尝试实现事件侦听器。Node js 将订阅事件(使用 C++ 函数)。当事件发生时,C++ 应该通知节点 js。

JS代码:

C++ 代码:

C++ 代码在编译时抛出错误

任何人都可以帮我解决如何解决将节点函数 env 存储到 C++ 映射中的问题。我需要保存环境,以便在调用节点回调时发送响应。

0 投票
2 回答
437 浏览

node.js-addon - 如何知道特定示例或 repo 使用了几种制作 C/C++ nodeJS 插件的方法中的哪一种?

显然,多年来情况已经演变,有三种、四种或五种主要方法可以用 C/C++ 编写 nodeJS 插件,具体取决于您在哪里阅读它。

对于我们这些只是想在 2021 年学习和编写我们的第一个插件的人来说,这可能会令人困惑。我可能会在我的网络浏览器中打开一些教程,并从 GitHub 下载一些代码库,以了解某些事情是如何完成的。

但是除非顶部有注释清楚地说明每个教程或 repo 使用的四种方式中的哪一种,否则它会变得非常混乱。当你刚开始时,每个人都有的名字并没有足够的区别来提供很大的帮助。

那么,当我查看使用这四种方式的代码时,我可以一目了然地了解哪些内容?

我看到有各种主要的包含文件可能位于主 C/C++ 源文件的顶部,并且有某些宏或函数调用的名称略有不同,它们根据插件使用的方式执行相同的操作。

这可能会因为这些方式中的一些方式变得复杂,要么是其他方式的包装,要么有时需要调用较低级别的函数。我不确定。