问题标签 [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.
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 :)
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
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
。我该怎么做呢?
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] 的指针
我在网上查了很多例子,它们都有相同的语法:
关于该行,我看不出我的代码和他们的代码之间的区别。
如果我按照编译器所说的去做并在该行添加一个 & 符号,它会给出一个完全不同的错误:
..\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]
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?
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::Callback
Call()
Nan::TryCatch tc;
Local<Value> retv = pf->Call( Nan::GetCurrentContext()->Global(), objc-1, &args );
if ( tc.HasCaught() ) {
printf("EXCEPTION:\n");
...
事实上,脚本只是在 JS 错误时退出,我再也没有回来检查tc
,调用返回值 ( retv
) 来处理任何未决的异常。我究竟做错了什么?
c++ - Nodejs C/C++ 会使用多个Core吗?
我知道NodeJS 在单核中运行的事实。但是,如果我构建一个实现了多线程的 NodeJS C/C++ 插件会发生什么?这个插件会消耗一个以上的核心(当它应该时)?
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 库版本?
node.js - 节点 NAN:在 AsyncWorker 的 Execute 方法中调用 GetFromPersistent 设置错误
我正在为节点构建一个本机扩展,其中包括一个长时间运行的操作,并在完成时进行回调。
我将节点缓冲区传递给调用。它包含扩展要处理的内容的有效负载。
我应该能够将我的缓冲区存储在我的 AsyncWorker 的构造函数中的持久存储中,并在以后需要时检索它。
这个例子(来自 nan 测试套件)是我通常基于我的代码的: https ://github.com/nodejs/nan/blob/master/test/cpp/bufferworkerpersistent.cpp
该测试有效,但在使用 HandleOKCallback 方法之前它不会对缓冲区做任何事情,这对我来说不是很有趣。我需要在 Execute 方法期间访问缓冲区。
如果我只是在测试的 Execute() 方法中添加一行来尝试访问缓冲区,如下所示:
GetFromPersistent 调用出现段错误。
我的问题是:我错过了什么?我是否应该无法将持久对象拉入 Execute 方法?如果是这样,为什么不呢?
c++ - 存储 JS 对象并返回他 - Nodejs 插件
我只是想构建一个只接收任何对象并将它们返回的插件。
服务器:
添加在: