我正在尝试创建一个基本的本机节点插件,在该插件中,从节点传递了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 ++的正确方法是什么?甚至有可能吗?
答案 0 :(得分:2)
使用Napi::Object
。 Napi::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对象进行交互的唯一方法