问题标签 [node.js-addon]

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

javascript - 使用 NAN 将数组从 node.js 传递到 c++ v8

我正在使用NAN在 node.js 中包含一个 c++ 库。我了解如何在两者之间来回传递数字和字符串,但我不明白如何传递数组。我想做的是这样的:

index.js

测试.cc

声明了我想从 c++ 库中使用的实际方法:

我尝试查看文档,但他们没有说任何关于指针和数组的内容。我错过了什么吗?

0 投票
1 回答
2708 浏览

c++ - V8 多线程函数

我正在编写一个 Node 插件,但在尝试从 C++ 工作线程调用 V8 函数对象时遇到问题。

我的插件基本上启动了一个 C++ std::thread 并使用 WaitForSingleOject() 进入一个等待循环,这是由另一个 C++ 应用程序(一个 X-Plane 插件)写入一点共享内存触发的。我试图让我的 Node 插件在 Windows 共享事件发出信号时唤醒,然后调用我从节点应用程序注册的 JavaScript 函数,该函数又会将源自 X-Plane 的数据传递回 Node和网络世界。

我已经设法弄清楚如何注册一个 JavaScript 函数并从 C++ 调用它,但仅限于 V8 主线程。我似乎找不到从 std::thread 调用函数的方法。

我尝试了各种方法,Locker 对象(变量成功),持久函数(不起作用),保存主隔离对象,进入/退出隔离,但是如果/当代码最终到达函数对象时它是无效的。

我得到不同的结果,从崩溃到冻结,这取决于我是否创建了各种储物柜和解锁器对象。

我对 V8 完全陌生,所以我不确定我做对了什么。有问题的代码如下:

如果有人可以提供帮助,我将永远感激不尽!

0 投票
1 回答
751 浏览

c++ - 在 NodeJS 插件中将 args 转换为 double

我想将参数 0 转换为 long,以将其用于 dll 函数。

函数定义为long function(long)

电话就像

我收到以下警告:

还有其他节点方法吗?如果我转换为字符串,然后通过 C 本机函数将其转换为 long,我不会丢失数据,对吗?(我并不真正关心“数据丢失”,但我想摆脱警告)

0 投票
0 回答
530 浏览

c++ - v8::Context 内存泄漏

我正在尝试使用 v8 在 C++ 上开发 nodejs 模块。

这是源代码。

然后用js代码测试一下:

每个函数都有不同的问题:

TestContext1工作正常,但访问全局上下文并关闭进程。

TestContext2无法访问全局上下文,但会导致内存泄漏。

我所需要的 - 在隔离的上下文中执行 js 脚本而不会发生内存泄漏。

节点 vm 不起作用,因为 vm.runInNewContext() 具有相同的内存泄漏。

有人有什么想法吗?

0 投票
1 回答
1440 浏览

c++ - 将 c++ 双缓冲区传递给 Node Js(直接)[Node JS : V8 c++ : Nan]

我正在尝试将确定的双精度数组从 c++ 传递回 Node JS。我现在这样做的方式有效,但它会扼杀性能。因为我需要将双缓冲区转换为 v8 数组。有没有办法直接将双打传递给节点 JS 而无需转换?这是我希望避免使用的伪转换代码:

从节点 js,我得到这样的双打:

0 投票
1 回答
1121 浏览

c++ - 缓冲字节 - Node.js 插件

我想从 Node.js 接收 wav 流(在附加组件中)。它是这样实现的:

但现在我想缓冲这些信息,并创建原始 wav 的副本。到目前为止,我无法用字节填充新文件。

我不明白为什么,但sizeof(buf)总是太小。我想是因为这个。

0 投票
1 回答
102 浏览

c++ - 节点 v0.12 的 C++ API 文档

是否有关于 node.js 的 C++ API 的完整文档?

我能找到的所有东西都是http://izs.me/v8-docs/main.html似乎很旧。并且基于这篇文章https://strongloop.com/strongblog/node-js-v0-12-c-apis-break/节点 v0.12 的 API 发生了重大变化。

问题是我需要将旧模块迁移到 0.12 并且没有文档几乎是不可能的。

0 投票
1 回答
270 浏览

c++ - V8 回调,使用数字而不是字符串

将参数从 Node.js 传递给 C++ 函数,并通过回调函数将结果返回给 Node.js。

Node.js 插件回调示例之后,该示例已修改为涉及数字而不是字符串。

这是来自 Node.js 插件的示例代码集:

这是修改后的代码集,其中 value 是数组中某个位置的数字:

0 投票
1 回答
337 浏览

c++ - 如何在 C++ NodeJS 插件中使用 V8::AddMemoryAllocationCallback 方法

我正在尝试对 NodeJS C++ 插件使用V8::AddMemoryAllocationCallback方法。我想调用该方法并返回该大小值。我想出了以下代码。似乎它没有调用回调方法。代码取自gonative npm 模块。

但是该memCallback方法没有被触发。为什么?如何解决?

它将使用以下 C++ 代码来访问 V8 库。

node-gyp 用于构建和运行代码(node-gyp rebuild && node index.js 1000 && ls /tmp/从当前文件夹尝试)

以下是 JavaScript 代码。我创建了几个变量来分配一些内存。

电流输出为;

0 投票
1 回答
719 浏览

c++ - Fail to build node c++ addon

I am working on a project that uses stereolab's depth camera ZED to retrieve distance of obstacles. Its SDK is written in C++ and it requires CUDA 6.5. However, I have to integrate this program with another part of project, which is written in nodejs. So I decided to compile ZED code as a node module. I've gone through node addon tutorial. Now I've written the interface, but I got following error after trying to build the project using command "node-gyp configure build". It seems the 'zed' module wasn't built. I have no idea what this error is and I've searched nothing so far. Can someone please give me some directions? Thank you.

This is my binding.gyp:

This is my package.json:

And following is basically my interface with node: (just started for testing, 'initProgram' is working as 'main' for the project)

An example using this module should be:

Not sure if this works, haven't tested it yet. I'm new to nodejs.