Node-Addon-Api传递数组作为函数参数

时间:2018-09-28 10:36:19

标签: c++ node.js node-addon

我正在尝试创建一个基本的本机节点插件,在该插件中,从节点传递了javascript数组,然后在c ++中对其进行了处理。问题是我不知道如何正确传递数组。我可以实例化该数组,而不会出现问题,但是使用info [0]进行分配。会引发错误。

我的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;
}

我得到的错误是

../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>;
             ~~~~~~~~^~~~~~~~~

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

4 个答案:

答案 0 :(得分:2)

使用Napi::ObjectNapi::Array实际上是从Napi::Object继承的。

您可以将代码Array a = info[0].As<Array>;替换为Array a = info[0].ToObject();

然后您可以通过“值”访问数据成员 operator[] (uint32_t index) const

来源https://nodejs.github.io/node-addon-api/class_napi_1_1_object.html

编辑:奖励功能,如果传递了不是对象的参数,则会自动触发Error: Object Expected

答案 1 :(得分:1)

这对我有用:

<div class="container">
  <img src="https://cdn.iconscout.com/icon/free/png-256/avatar-375-456327.png" class="image" alt="Avatar" style="width:200px">
  <div class="middle">
    <div class="text">Avatar sample</div>
  </div>
</div>


<div class="container">
  <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcREEGUm8xTq6g_39HvAO-LDynq64MqzfEyHenC3E5Sz0Ci5DWck" class="image" alt="Avatar" style="width:200px">
  <div class="middle">
    <div class="text">Avatar sample 2</div>
  </div>

答案 2 :(得分:1)

错误代码在这里:

Array a = info[0].As<Array>;

应该是

Array a = info[0].As<Array>();

答案 3 :(得分:0)

我无法找到直接通过node-addon-api与Javascript对象进行交互的实际问题的解决方案。我选择使用的解决方案是JSON.stringify任何数组或对象,然后解析,然后在c ++中是一个名为rapid json的库。事实证明,这是与我能够找到的javascript对象进行交互的唯一方法