问题标签 [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.
javascript - 将 N-API 对象读入 C++ 原语
我从 generator-napi-module 的 ObjectWrap 样板开始创建了一个简单的 N-API 模块,并成功地将数据(包含具有字符串、数字和布尔属性的对象的数组)传递给 JS。但是,我无法解析传递回本机代码的相同对象之一的属性;具体来说,uint32_t
从传递对象的属性(数字)创建一个值。
假设创建了一个对象数组并将其传递给 JS:
然后将这些对象之一传递给本机函数调用:
这构建得很好,但上面的 OtherMethod()A number was expected
在uint32_t temp = obj.Get('someProp').As<Napi::Number>()
.
如何从 JS 对象属性值创建本机 (C++) 值?
c++ - 从节点添加获取字符串参数
我正在尝试将字符串传递给 Node.js 中的 C++ 插件。我正在使用 Nan 图书馆,这似乎是推荐的。对于具有数字的等效任务,我执行以下操作:
之后我可以使用blocks
变量。似乎没有任何等效StringValue
功能。我已经尝试过info[0]->ToString(ctxt)
,但这给了我一个MaybeLocal
似乎是一个空检查local
。一旦我转换为v8::Local<v8::String>
我不知道如何实际访问字符串值。我也尝试过info[0]->Cast
,但这也不起作用。任何帮助,将不胜感激。
c++ - 如何从 NAPI(节点插件)接口读取文件并使用 nodejs 文件流写入不同的文件
我正在尝试读取 NAPI 应用程序中的文件并调用回调函数将其写入 nodejs 应用程序中的 writestream。
exmaple_Class.cpp
exmaple_Class.js
C++侧函数的限制是它不能返回值,所以数据必须在回调中返回。有趣的是,如果它是一个文本文件,它可以正常工作,但对于 zip 或 jpeg 等其他类型的文件,我会得到乱码数据。如果我将文件描述符传递给 C++ 函数并使用 UNIX 写入函数,那么我会得到该文件。但我也想使用 express 通过 HTTP 发送该数据。那么出了什么问题呢?如何正确包装和返回 NAPI 对象中的二进制数据。
c++ - 节点插件 Nan::NewBuffer 导致内存泄漏
我有一个使用 Nan 库的 c++ 节点添加。我有一个需要返回缓冲区的函数。最简单的版本如下(根据注释编辑代码):
联合只是用作重新解释字节的简单方法。根据文档, Nan::NewBuffer 承担了内存的所有权,因此无需手动释放内存。但是,当我运行使用此功能的节点代码时,我的内存猛增,即使我通过强制垃圾收集器运行global.gc();
节点代码产生错误也非常简单:
任何帮助,将不胜感激。
c++ - 在节点插件中添加两个字符串参数
我试图在我的插件中添加两个字符串参数,但我无法让它工作。我总是收到关于这两个参数类型的错误。
我的功能:
整个文件:
对于任何反馈,我们都表示感谢。
c++ - 在 Node.js C++ 插件中,永远不会调用 SetWindowsHookEx 的回调
当我在 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)
......
node.js - nodejs napi 如何手动创建 CallbackInfo 类型的数据
我想调用一些已有的函数,但是函数需要CallbackInfo参数,如何初始化一个CallbackInfo
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 文件中。因此,如果库编译,它应该已经被定义。我显然在这里遗漏了一些东西。有什么提示可以解决这个问题吗?
兄弟,阿列克西
c++ - 来自本机 C++ 代码的节点 js 回调抛出错误
我正在尝试实现事件侦听器。Node js 将订阅事件(使用 C++ 函数)。当事件发生时,C++ 应该通知节点 js。
JS代码:
C++ 代码:
C++ 代码在编译时抛出错误
任何人都可以帮我解决如何解决将节点函数 env 存储到 C++ 映射中的问题。我需要保存环境,以便在调用节点回调时发送响应。
node.js-addon - 如何知道特定示例或 repo 使用了几种制作 C/C++ nodeJS 插件的方法中的哪一种?
显然,多年来情况已经演变,有三种、四种或五种主要方法可以用 C/C++ 编写 nodeJS 插件,具体取决于您在哪里阅读它。
对于我们这些只是想在 2021 年学习和编写我们的第一个插件的人来说,这可能会令人困惑。我可能会在我的网络浏览器中打开一些教程,并从 GitHub 下载一些代码库,以了解某些事情是如何完成的。
但是除非顶部有注释清楚地说明每个教程或 repo 使用的四种方式中的哪一种,否则它会变得非常混乱。当你刚开始时,每个人都有的名字并没有足够的区别来提供很大的帮助。
那么,当我查看使用这四种方式的代码时,我可以一目了然地了解哪些内容?
我看到有各种主要的包含文件可能位于主 C/C++ 源文件的顶部,并且有某些宏或函数调用的名称略有不同,它们根据插件使用的方式执行相同的操作。
这可能会因为这些方式中的一些方式变得复杂,要么是其他方式的包装,要么有时需要调用较低级别的函数。我不确定。