Node-Addon-Api Pass Array As Function Argument
我正在尝试创建一个基本的本机节点插件,其中从节点传递了javascript数组,然后在c中对其进行了处理。问题是我不知道如何正确传递数组。我可以实例化该数组,而不会出现问题,但是可以使用info [0]进行分配。抛出错误。
我的c代码是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #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; } |
我得到的错误是
1 2 3 4 | ../cppsrc/main.cpp: In function a€?Napi::Value Add(const Napi::CallbackInfo&)a€?: ../cppsrc/main.cpp:12:21: error: conversion from a€?<unresolved overloaded function type>a€? to non-scalar type a€?Napi::Arraya€? requested Array a = info[0].As<Array>; ~~~~~~~~^~~~~~~~~ |
将数组传递给c的正确方法是什么?可能吗?
这对我有用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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(); } |
使用
您可以将代码
然后您可以通过"值"访问数据成员
来源:https://nodejs.github.io/node-addon-api/class_napi_1_1_object.html
编辑:奖励功能,如果传递的不是对象参数,则会自动触发
错误代码在这里:
1 | Array a = info[0].As<Array>; |
应为
1 | Array a = info[0].As<Array>(); |
我无法找到直接通过node-addon-api与Javascript对象进行交互的实际问题的解决方案。我选择使用的解决方案是JSON.stringify任何数组或对象,然后解析,然后在c中创建一个名为Rapid json的库。事实证明,这是与我能够找到
的javascript对象进行交互的唯一方法