节点加载项Api传递数组作为函数参数 我试图创建一个基本的本地节点ADDON,其中JavaScript数组从节点传递,然后在C++中处理。问题是我无法理解如何正确传递数组。我可以毫无问题地实例化数组,但使用信息[0]分配它。as会引发错误 < >我的C++代码是 #include <napi.h> using namespace Napi; using namespace std; Value Add(const CallbackInfo& info) { Env env = info.Env(); Array result = Napi::Array::New(env); Array a = info[0].As<Array>; double arg1 = info[1].As<Number>().DoubleValue(); Number num = Napi::Number::New(env, 2 + arg1); return num; } #包括 使用名称空间Napi; 使用名称空间std; 增值(const CallbackInfo&info) { Env Env=info.Env(); 数组结果=Napi::数组::新建(env); 数组a=info[0].As; double arg1=info[1].As().DoubleValue(); Number num=Napi::Number::New(env,2+arg1); 返回num; }

节点加载项Api传递数组作为函数参数 我试图创建一个基本的本地节点ADDON,其中JavaScript数组从节点传递,然后在C++中处理。问题是我无法理解如何正确传递数组。我可以毫无问题地实例化数组,但使用信息[0]分配它。as会引发错误 < >我的C++代码是 #include <napi.h> using namespace Napi; using namespace std; Value Add(const CallbackInfo& info) { Env env = info.Env(); Array result = Napi::Array::New(env); Array a = info[0].As<Array>; double arg1 = info[1].As<Number>().DoubleValue(); Number num = Napi::Number::New(env, 2 + arg1); return num; } #包括 使用名称空间Napi; 使用名称空间std; 增值(const CallbackInfo&info) { Env Env=info.Env(); 数组结果=Napi::数组::新建(env); 数组a=info[0].As; double arg1=info[1].As().DoubleValue(); Number num=Napi::Number::New(env,2+arg1); 返回num; },c++,node.js,node.js-addon,C++,Node.js,Node.js Addon,我得到的错误是 ../cppsrc/main.cpp: In function ‘Napi::Value Add(const Napi::CallbackInfo&)’: ../cppsrc/main.cpp:12:21: error: conversion from ‘<unresolved overloaded function type>’ to non-scalar type ‘Napi::Array’ requested Array a = info[0].A

我得到的错误是

../cppsrc/main.cpp: In function ‘Napi::Value Add(const Napi::CallbackInfo&)’:
../cppsrc/main.cpp:12:21: error: conversion from ‘<unresolved overloaded function type>’ to non-scalar type ‘Napi::Array’ requested
   Array a = info[0].As<Array>;
             ~~~~~~~~^~~~~~~~~
。/cppsrc/main.cpp:在函数“Napi::Value Add(const-Napi::CallbackInfo&)”中:
../cppsrc/main.cpp:12:21:错误:请求从“”转换为非标量类型“Napi::Array”
数组a=info[0].As;
~~~~~~~~^~~~~~~~~

< >将数组传递给C++的正确方法是什么?甚至有可能吗?

对于直接使用节点插件api与Javascript对象交互的实际问题,我无法找到解决方案。我选择的解决方案是JSON。Srimigy任何数组或对象,然后解析,然后在C++中是一个被调用的库。这证明是与javascript对象交互的唯一方法,我已经找到了使用
Napi::Object
Napi::Array
实际上是从
Napi::Object
继承的

您可以将代码
数组a=info[0]替换为

编辑:额外功能,如果传递的参数不是对象,这将自动触发
错误:预期对象

这对我有效:

void runSetPropertyAsyncWorker(const CallbackInfo& info) 
{
    std::string path = info[0].As<Napi::String>();
    int property = info[1].As<Number>();
    int dataSize = info[2].As<Number>();
    Array b = info[3].As<Array>();
    for(int i = 0; i<b.Length(); i++)
    {
      Napi::Value v = b[i];
      if (v.IsNumber())
      {
        int value = (int)v.As<Napi::Number>();
        ...
        ...
      }
    }

    ...
    ...

    Function callback = info[4].As<Function>();
    AsyncWorker* asyncWorker = new SetPropertyAsyncWorker(callback, ...);
    asyncWorker->Queue();
}
void runSetPropertyAsyncWorker(const CallbackInfo&info)
{
std::string path=info[0].As();
int property=info[1].As();
int dataSize=info[2].As();
数组b=info[3].As();
对于(int i=0;iQueue();
}
此处的错误代码:

数组a=info[0].As;
应该是哪一个

数组a=info[0].As();

这不是真的。此外,它会大幅减慢代码,因为你必须在C++中解析JSON。JavaScript也不是很方便。我理解它不是一个理想的解决方案,但它是当时我能想到的最好的方法。我用的数据的大小并不是真正的速度问题。IDJSON是一个非常快的C++ JSON库。