Tag: node.js addon

VS代码debuggingC ++节点插件

我尝试在用GYP编译的C ++ Node-Addon的visual studio代码中设置debugging。 如果可能的话,我想通过源代码。 我使用打字稿作为我的服务器语言,并包含由gyp编译的“.node”文件。 这工作正常,但我如何设置它,所以我可以不仅通过打字稿代码,而且还通过C ++代码? .cc文件的VSCode断点: 我知道我可以用gyp node-gyp rebuild –debug编译debugging版本,但是我没有计划如何在vscode中使用它。

在Node.js插件中使用std :: thread

想象一下,我使用一个同步函数,从我的Node.js插件: var check_ok = addon.my_function(parameters); var final_results = addon.final_function(parameters); 但是在方法代码中我有: std::thread t[10]; //Global //… void my_function(const FunctionCallbackInfo<v8::Value>& args) { //…. t[0] = thread(random_void_function, [parameters]) t[1] = thread(random_void_function_2, [parameters]) //… } //… void final_results(const FunctionCallbackInfo<v8::Value>& args) { //… t[0].join(); t[1].join(); //…Give results.. etc } 所以我有两个同步调用的插件,但在这个插件使用两个线程。 一个函数将启动线程,另一个将join它们。 问题是: random_void_function和random_void_function_2将并行运行? 由于my_function和final_function是同步的,因此random_void_function和random_void_function_2将会阻塞事件循环? 从我看到的,他们不挡。

这与ObjectWrap :: Unwrap的Holder相比

v8::FunctionCallbackInfo类区分This和Holder 。 我知道this是什么在JavaScript中,并假设This反映了这种设置。 但是我对Holder的含义只有一个模糊的概念,对于什么时候应该使用Holder而不是This ,我的想法很less。 特别是在编写一个基于nan的node.js扩展和ObjectWrap一个ObjectWrap ,我应该传递哪一个? 目前node::ObjectWrap文档有使用Holder例子,而目前的Nan::ObjectWrap文档使用This ,所以“只要按照文档中的例子”就Nan::ObjectWrap这个问题。

从Node.js调用C ++库(Node addons / node-ffi)

我正在尝试将外部C ++库(我可以访问.so文件以及头文件)集成到我的Node.js应用程序中。 经过大量的研究,我的select被缩减为: 编写一个节点插件 使用node-ffi 从node-ffi的gitHub的定义,我不能确定它会或不会直接在C ++库上工作: node-ffi是一个用于使用纯JavaScript加载和调用dynamic库的Node.js插件。 它可以用来在不编写任何C ++代码的情况下创build与本地库的绑定。 所以我的问题是: 选项1)是否意味着以某种方式重写外部C ++库? node-ffi是否能够直接调用C ++库,而不需要任何forms的C封装器? 我不是C / C ++的专家,所以如果我错过了一些基本的东西可以回答,请让我知道,这样我可以改善我的问题。

* v8 :: String :: Utf8Value(args – > ToString())不会返回node.js addon参数的string

我发现* v8 :: String :: Utf8Value(args [0] – > ToString())返回节点0.8.2上的正确string32位,并且不返回节点0.8.8上的正确string64-位。 有人明白为什么吗? 我的node.js插件看起来像这样: #define BUILDING_NODE_EXTENSION #include <node.h> #define MAX_OUTPUT_BUF 80 extern "C" char *do_sqlsig(char *in); using namespace v8; Handle<Value> Sqlsig(const Arguments& args) { HandleScope scope; char *c_arg, *ret; if (args.Length() < 1) { ThrowException(Exception::TypeError(String::New("Wrong number of arguments"))); return scope.Close(Undefined()); } c_arg = *v8::String::Utf8Value(args[0]->ToString()); ret = c_arg; […]

最简单的方法(单行)从v8函数获取默认参数?

自从我使用C ++以来,已经有很长的一段时间了,甚至更长的时间,因为我把自己的头围绕在硬的types上。 我只是寻找一个工作class轮从v8获得参数,或者当一个参数没有提供时的默认值。 v8::String::Utf8Value arg0(args[0]); v8::String::Utf8Value arg1(args[1]); v8::String::Utf8Value arg2(args[2]); const char *username = (args.Length() > 0) ? *arg0 : ""; const char *password = (args.Length() > 1) ? *arg1 : ""; const char *service = (args.Length() > 2) ? *arg2 : "login"; 输出: FUNC(); // {用户名:“”,密码:“”,服务:“login”} FUNC( '1'); // {用户名:“1”,密码:“”,服务:“login”} func('1','2'); // {用户名:“1”,密码:“2”,服务:“login”} func('a','b','c'); // […]

如何使用C ++插件中的模块中构build的node.js

我需要使用我的C ++插件模块“crypto”中构build的node.js。 我试图find使用内置模块的C ++插件的例子,但失败了。 我查看了node_crypto.h / .cc,它与node.jsencryption文档,受保护的构造函数等有着不同的函数签名。node_crypto.h包含一个参数的InitCrypto()声明,但是node_crypto.cc没有定义这样的function。 只有InitCrypto有四个参数。 无论如何,我试着用一个参数使用InitCrypto,并得到“符号查找错误”。 我可以将require('crypto')的结果传递给我的插件,然后使用这个对象,但这是不安全的。 我们的JS代码在客户端的服务器上工作。 现在我认为C ++插件使用像openssl lib这样的smth,而不是内置在节点模块“crypto”中更简单。 所以我需要一些使用'crypto'模块的C ++插件的工作例子,或者链接到一些关于这个的文章。 任何使用C ++插件中的内置模块的例子都是有帮助的。

自定义node.js插件可以被创build但不能包含

我正在编写一个由C ++与C程序混合的自定义node.js插件。 addon.cc由类似的东西组成 #define BUILDING_NODE_EXTENSION #include <node.h> #include <node_buffer.h> using namespace v8; using namespace node; /* other logic and function… */ Handle<Value> RunCallback(const Arguments& args) { HandleScope scope; Local<Value> buffer1 = args[0]; size_t size = Buffer::Length(buffer1->ToObject()); char* bufferdata = Buffer::Data(buffer1->ToObject()); /* some logic written in C style … */ Local<Function> cb = Local<Function>::Cast(args[1]); const unsigned […]

node-ffi与节点扩展以访问现有的C ++function

我有一些现有的C ++代码在独立的C ++应用程序中进行数字处理。 我现在想在新的node.js应用程序中使用该代码。 研究如何从node.js访问C ++代码,有两个选项: 编写一个node.js扩展 使用node-ffi 节点ffi似乎是一个很好的select来访问现有的库 ,但我正确的想法,如果我使用node-ffi我将不得不写一个C封装,使我的C ++可访问? (这是我可以通过Visual Studio在Windows上运行的简单testing用例的唯一方法)。 对于我的情况,我的源代码已经在C ++中,而不是C,在上面两个选项之间进行select时需要考虑什么?