Tag: node.js addon

如何更新我的function以使用新的v8 FunctionTemplates?

我有一些使用V8 FunctionTemplates的代码。 它是一个较老的Node.js模块的一部分,充当一个C ++库的包装器。 void NNet::PrototypeInit(Local<FunctionTemplate> t) { … t->InstanceTemplate()->SetAccessor(Nan::New<String>("training_algorithm").ToLocalChecked(), GetTrainingAlgorithm, SetTrainingAlgorithm); t->InstanceTemplate()->SetAccessor(Nan::New<String>("learning_rate").ToLocalChecked(), GetLearningRate, SetLearningRate); t->InstanceTemplate()->SetAccessor(Nan::New<String>("learning_momentum").ToLocalChecked(), GetLearningMomentum, SetLearningMomentum); t->InstanceTemplate()->SetAccessor(Nan::New<String>("layers").ToLocalChecked(), GetLayerArray); } 但是,当代码运行时,编译器会提供这些错误。 In static member function 'static void NNet::PrototypeInit(v8::Local<v8::FunctionTemplate>)': error: invalid conversion from 'Nan::NAN_GETTER_RETURN_TYPE (*)(v8::Local<v8::String>, Nan::NAN_GETTER_ARGS_TYPE) {aka void (*)(v8::Local<v8::String>, const Nan::PropertyCallbackInfo<v8::Value>&)}' to 'v8::AccessorGetterCallback {aka void (*)(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>&)}' [-fpermissive] t->InstanceTemplate()->SetAccessor(Nan::New<String>("training_algorithm").ToLocalChecked(), GetTrainingAlgorithm, SetTrainingAlgorithm); ^ error: initializing […]

Native Node.JS模块 – 从参数中parsingint

我正在尝试编写一个本地C ++模块来包含在一个Node.js项目中 – 我遵循这里的指南,并且设置得非常好。 总的想法是,我想要传递一个整数数组到我的C ++模块进行sorting; 该模块然后返回sorting的数组。 但是,我不能编译使用node-gyp build因为我遇到以下错误: 错误:没有可行的从“本地”转换为“int *” 它在我的C ++中抱怨这个代码: void Method(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = args.GetIsolate(); int* inputArray = args[0]; // <– ERROR! sort(inputArray, 0, sizeof(inputArray) – 1); args.GetReturnValue().Set(inputArray); } 这一切对我来说都是有意义的 – 编译器不能将arg[0] (大概是typesv8::Local )转换成int* 。 话虽如此,我似乎无法find任何方法让我的参数成功转换成一个C + +整数数组。 应该知道,我的C ++是相当生锈的,我对V8一无所知。 任何人都可以指向正确的方向吗?

节点NAN:在AsyncWorker的Execute方法中调用GetFromPersistent

我正在为节点构build一个本地扩展,其中包含一个完成时的callback函数。 我正在传递一个节点缓冲区到通话。 它包含要由扩展处理的内容的有效载荷。 我应该能够将我的缓冲区存储在我的AsyncWorker的构造函数中的持久性存储中,并在需要时稍后检索它。 这个例子(来自nantesting套件)是我通常基于我的代码: https : //github.com/nodejs/nan/blob/master/test/cpp/bufferworkerpersistent.cpp 这个testing是有效的,但是直到HandleOKCallback方法对缓冲区没有任何作用,这对我来说并不是很有趣。 我需要在Execute方法中访问缓冲区。 如果我只是在testing的Execute()方法中添加一行来尝试访问缓冲区,如下所示: void Execute () { printf("before GetFromPersistent\n"); v8::Local<v8::Value> handle = GetFromPersistent("buffer"); printf("after GetFromPersistent\n"); printf("buffer @%llux len %ld\n", (uint64_t)node::Buffer::Data(handle), node::Buffer::Length(handle)); Sleep(milliseconds); } 我在GetFromPersistent调用中遇到seg错误。 我的问题是:我错过了什么? 我应该不能将一个持久对象拖入Execute方法吗? 如果是这样,为什么不呢?

将数据从NodeJS传输到C ++应用程序

我想将信息从nodejs传输到在Linux平台上运行的embedded式C ++应用程序。 这可能吗? 主程序是用C ++编写的,软件更新程序(Node JS)是一个独立的应用程序,由主C ++程序调用。 我想解释数据传输将要发生的环境。 具体如下: Main C ++应用程序调用独立的NodeJS应用程序 Node JS进行SOAP调用,并从Web获取可用的更新名称 然后将名称传递给主应用程序,主应用程序(用户)select要下载的软件更新。 节点JS然后下载软件更新并退出。 这种数据传输可能吗? 谢谢

使用Nan在Node.js插件代码中创build数组

我正在编写Node add-on,尽可能使用nan库来编写代码。 Node项目推荐使用它,因为它可以让您编写与不同版本的v8和节点兼容的代码。 然而,经过多次查看他们的文档 ,我还没有find任何有关在nan API中处理数组的指导。 对于像JavaScript代码那样处理作为parameter passing数组的基本任务,或者在插件中实例化新的数组对象并将其返回给Javascript代码。 我们是否应该直接使用v8::Array API。 我希望API的Nan :: New部分能够更好地处理这个问题。 我错过了什么吗?

C ++ / Node.js:binding.gyp库失败

我在Visual Studio 2015中使用EnumProcessModules在Windows 7上创build了一个C ++程序。 当我在VS2015编译它成功。 现在,我在Node.js中创build了一个包含上面代码(EnumProcessModules)的C ++插件。 当我从命令行编译它(通过运行node-gyp构build ),我得到以下错误: LINK : fatal error LNK1181: cannot open input file 'psapi.dll' [C:\Users\Yoni\W ebstormProjects\my_prog\build\getProcesses.vcxproj] psapi.dll存在于 C:\Users\Yoni\WebstormProjects\my_prog\ 我把它从C:\Windows\System32\ 这是我的binding.gyp代码: { "targets": [ { "target_name": "getProcesses", "sources": [ "psInfo.cc", "json.hpp" ], "libraries": [ "psapi.dll" ] } ] } 如何解决这个问题? Thx的帮助。

将v8对象转换为自定义的C ++对象

我目前正在开发一个nodejs模块,用C ++编写,我一直在寻找一种方法来将v8::Object从opencv转换成cv::Mat对象,现在没有任何运气。 我看到南图书馆可以帮助转换对象,但我不知道如何,我甚至不知道是否有可能在我的情况下转换它们。 v8果汁项目将满足我的期望,但由于它已被放弃,我只是不知道如何做到这一点。 这是我想要做的一个片段: void BRMatcher::run(const v8::FunctionCallbackInfo<v8::Value>& args) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::HandleScope scope(isolate); if (args.Length() < 1) { isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8(isolate, "Missing parameter [Mat img]."))); return ; } if (!args[0]->IsObject()) { isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8(isolate, "Parameter [Mat img] must be an object."))); return ; } v8::Local<v8::Object> cvMat(args[0]->ToObject()); Mat img = ??? // This is where I ended […]

Nodejs C / C ++会使用多个Core?

我知道NodeJS运行在一个单一的核心。 但是,如果我构build了一个实现了multithreading的NodeJS C / C ++插件,会发生什么? 这个插件会消耗超过一个核心(当它假设)?

NodeJS Addon从NAN内部调用JavascriptcallbackAsyncWorker :: Execute

我想从我的asynchronous附加函数中调用nodejscallback。 我已经看到了同步的例子( 在这里 ),我正在使用一个奇妙的asynchronous例子( 在这里 )作为一个起点。 但是,当我尝试执行给c ++ AsyncWorker子类的callback时,出现分段错误。 这是我的代码: #include <nan.h> #include <functional> #include <iostream> #include <exception> using namespace Nan; using namespace v8; using namespace std; class ScriptWorker : public AsyncWorker { public: ScriptWorker(Callback *callback, const std::map<std::string, Callback*>) : AsyncWorker(callback), script(script), cbs(cbs) {} ~ScriptWorker() {} void Execute () { // ———————— // Segmentation fault […]

C ++从'char *'无效转换为'const unsigned char *'

我在NodeJS中编写我的项目,但我不得不使用C共享库。 正因为如此,我不得不使用Node.js插件。 调用C ++代码完美地工作,我也能够加载自定义库,并成功地调用两个C函数:一个给我的库的版本号,另一个方法基于JS提供的数据生成一个密钥。 我遇到的问题与生成的密钥有关。 我必须使用encrypt和decrypt方法。 这是我用来存储密钥的variables: unsigned char generated_key[256]; 这是生成密钥的function: extern "C" { #ifdef WIN32 VE_EXPORT int CALLBACK generate_key #else int generate_key #endif (char *variable_msg, /*!< variable seed */ char *shared_seed, /*!< shared seed */ unsigned char *generated_key, /*!< generated key */ unsigned int key_size); /*!< key size */ } 这是一个使用键的function: extern "C" { […]