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

c++ - CFLAGS not working on Windows when compiling with node-gyp

For some reason when I compile using node-gyp on Windows, CFLAGS are ignored. Does anyone maybe know the reason? This is my code:

Binding.gyp

helloWindows.cpp

Thanks in advance :)

0 投票
1 回答
906 浏览

c++ - How to attach Visual Studio to a C++ node module?

I wrote a node.js module in C++ with Visual Studio. I created the project with node-gyp configure --debug. This seems to work fine and I can compile my code and a loadable binary is created in the Debug folder. I am then able to require('./build/Debug/mymodule) this file from a server.js file and when I start the server from the command line (node server.js), the module runs. But I am struggling to figure out how to attach the Visual Studio Debugger.

According to this question it sounds like gdb is automatically attached (?), but how do I invoke my server.js with the Visual Studio debugger?

Edit: I run Visual Studio 2015 and node v4.1.2

0 投票
0 回答
600 浏览

c++ - 从 node.js 中的 C++ 模块重复调用 javascript 回调

所以我正在用 C++ 编写一个 node.js 模块,它处理来自相机的数据。app.js每当有新数据可用时,我想在我的文件中调用一个回调函数。

我现在拥有的

现在,我的节点 javascript 文件 ( app.js) 中有以下代码。它每秒调用我的 C++ 模块中的一个函数并返回到目前为止已处理的帧数:

在我的 C++ 文件中,我有以下功能。

1.)我有一个函数来获取帧数 - 如上所述从 javascript 调用的函数 -frameCounter指的是全局变量。

2.)而且我在 C++ 模块中有一个 C++-callback 函数,只要有新的帧可用就会触发(为了清楚起见,这个回调独立于 node.js 并且与 node.js-callbacks 没有直接关系)。

所有这一切都很好。

我想完成什么

setInterval而不是在我的 javascript 代码中注册一个函数。我想以某种方式在我的 C++ 模块中注册一个函数,只要相机有新帧可用,该函数就会被重复调用。它的行为应该像setInterval,但不是每秒触发一次,而是在帧可用时触发。

我希望在 javascript 端的代码类似于:

在 C++ 模块中,我想做类似的事情:

和一个注册 javascipt-callback 的函数setMyFrameInterval

那么,如何从NewFrameAvailable(当帧可用时触发的 C++ 回调函数)调用 javascript 回调。我想我基本上必须以某种方式使 javascript 函数在函数中全局可用,setMyFrameInterval以便函数也知道它newFrameAvailable。我该怎么做呢?

0 投票
1 回答
732 浏览

c++ - 使用 node-nan 在 node.js 模块中设置 WindowsHookEx

我正在尝试创建一个可以使用全局键绑定执行某些功能的 Electron node.js 应用程序。不幸的是,Electron 中的全局键绑定 API 在游戏中不起作用,因此我需要创建一个本地节点模块来监听这些低级键事件。

所以我使用 node-gyp 用 Visual Studio 2015 和 nan 编译项目来提供 node 和 c++ 之间的通信。我已经设法让项目的两个方面分别工作(低级键绑定和 node.js<-->nan 通信),但我在组合它们时遇到了麻烦。我也承认我对 c++ 的经验很少(我还没有编写过一个 c++ 程序)。

问题 #1:为了能够向 node.js 发送回消息,我需要复制 AsyncProgressWorker::ExecutionProgress 的指针并使其可用于整个类,以便当 HookCallback 触发时它可以向 node.js 发送消息.

编译器不喜欢这样

..\binding.cc(21): 错误 C2440: '=': 无法从 'const Nan::AsyncProgressWorker::ExecutionProgress *' 转换为 'Nan: :AsyncProgressWorker::ExecutionProgress *' [C:\Users\eksrow\ gdrive\projects\vscode\node-native-hello-world\build\bindin g.vcxproj]。

..\binding.cc(21):注意:转换丢失限定符

格式化:

'const Nan::AsyncProgressWorker::ExecutionProgress *'

'南::AsyncProgressWorker::ExecutionProgress *'

我设法通过将关键字 const 添加到私有成员 *executionProgress; 来解决这个问题。但我不明白为什么会修复它,const 变量一旦设置就不应更改。为什么会这样编译?

问题#2:这个非常奇特:

..\binding.cc(22):错误 C3867:'KeyboardEventWorker::HookCallback':非标准语法;使用 '&' 创建指向成员 [C:\Users\eksrow\gdrive\projects\vscode\node-native-hello-world\build\binding.vcxproj] 的指针

我在网上查了很多例子,它们都有相同的语法:

  1. SetWindowsHookEx #1
  2. SetWindowsHookEx #2

关于该行,我看不出我的代码和他们的代码之间的区别。

如果我按照编译器所说的去做并在该行添加一个 & 符号,它会给出一个完全不同的错误:

..\binding.cc(22): error C2276: '&': 对绑定成员函数表达式的非法操作 [C:\Users\eksrow\gdrive\projects\vscode\node-native-hello-world\build\binding .vcxproj] ..\binding.cc(22):错误 C2660:'SetWindowsHookExA':函数不接受 3 个参数 [C:\Users\eksrow\gdrive\project s\vscode\node-native-hello-world\build \binding.vcxproj]

0 投票
1 回答
212 浏览

c++ - Why is "Isolate::GerCurrent()" Null in asynchronous thread?

My final goal is to solve this problem, but I am getting stuck on some pretty basic stuff.

My whole C++ Module is basically as follows:

Why is isolate NULL after I call Isolate::GetCurrent() in AsyncWork?

0 投票
1 回答
1046 浏览

c++ - Nan::TryCatch 不会拦截 JS 代码中 Nan::Callback 抛出的异常

假设我有一个 JS 函数,它只是抛出一个错误:

function() { throw "Danger, Will Robinson!"; }

此函数作为参数传入 node.js 插件并用于构造 Nan::Callback (应该注意使此句柄持久化):

// get handle to JS function and its Tcl name Handle<Function> fun = Handle<Function>::Cast( info[0] ); Nan::Callback *pf = new Nan::Callback(fun);

当从 C++调用时,我在从 C++拦截这个 JS 异常时遇到问题:Nan::CallbackCall()

Nan::TryCatch tc; Local<Value> retv = pf->Call( Nan::GetCurrentContext()->Global(), objc-1, &args ); if ( tc.HasCaught() ) { printf("EXCEPTION:\n"); ...

事实上,脚本只是在 JS 错误时退出,我再也没有回来检查tc,调用返回值 ( retv) 来处理任何未决的异常。我究竟做错了什么?

0 投票
2 回答
208 浏览

c++ - Nodejs C/C++ 会使用多个Core吗?

我知道NodeJS 在单核中运行的事实。但是,如果我构建一个实现了多线程的 NodeJS C/C++ 插件会发生什么?这个插件会消耗一个以上的核心(当它应该时)?

0 投票
1 回答
121 浏览

c++ - 有没有办法让原生 npm 包依赖于特定版本的 V8 C++ API?

今天我发现在节点 0.10.40 上成功编译的旧版本的 node-fibers 和 bcrypt 在节点 5.1.0 上编译不成功。

例如,如果我尝试编译 bcrypt 0.7.8,我得到的错误肯定是由于 V8 API 的变化:

显然bcrypt无法确定 V8 API 是不兼容的版本。我也没有看到任何似乎适用的字段package.json或配置。node-gyp这是它的构建脚本中的一个错误,还是仅仅因为包无法确定 V8 库版本?

0 投票
1 回答
469 浏览

node.js - 节点 NAN:在 AsyncWorker 的 Execute 方法中调用 GetFromPersistent 设置错误

我正在为节点构建一个本机扩展,其中包括一个长时间运行的操作,并在完成时进行回调。

我将节点缓冲区传递给调用。它包含扩展要处理的内容的有效负载。

我应该能够将我的缓冲区存储在我的 AsyncWorker 的构造函数中的持久存储中,并在以后需要时检索它。

这个例子(来自 nan 测试套件)是我通常基于我的代码的: https ://github.com/nodejs/nan/blob/master/test/cpp/bufferworkerpersistent.cpp

该测试有效,但在使用 HandleOKCallback 方法之前它不会对缓冲区做任何事情,这对我来说不是很有趣。我需要在 Execute 方法期间访问缓冲区。

如果我只是在测试的 Execute() 方法中添加一行来尝试访问缓冲区,如下所示:

GetFromPersistent 调用出现段错误。

我的问题是:我错过了什么?我是否应该无法将持久对象拉入 Execute 方法?如果是这样,为什么不呢?

0 投票
1 回答
139 浏览

c++ - 存储 JS 对象并返回他 - Nodejs 插件

我只是想构建一个只接收任何对象并将它们返回的插件。

服务器:

添加在: