Nodejs c++ 插件:无法访问数组元素
Nodejs c++ addon: Not able to access Array elements
我想从 js 端访问作为 arg 传入函数的数组元素。
代码是这样的:
void Method(const FunctionCallbackInfo<Value> &args){
Isolate* isolate = args.GetIsolate();
Local<Array> array = Local<Array>::Cast(args[0]);
for(int i=0;i<(int)array->Length();i++){
auto ele = array->Get(i);
}
我收到这个错误:
error: no matching function for call to ‘v8::Array::Get(int&)’
阅读 V8 数组的实现后,我了解到 Array
没有 Get
方法。
这里是Array在v8源码中的实现:
class V8_EXPORT Array : public Object {
public:
uint32_t Length() const;
/**
* Creates a JavaScript array with the given length. If the length
* is negative the returned array will have length 0.
*/
static Local<Array> New(Isolate* isolate, int length = 0);
/**
* Creates a JavaScript array out of a Local<Value> array in C++
* with a known length.
*/
static Local<Array> New(Isolate* isolate, Local<Value>* elements,
size_t length);
V8_INLINE static Array* Cast(Value* obj);
private:
Array();
static void CheckCast(Value* obj);
};
我是 v8 库的新手。我浏览了一些教程,对他们来说效果很好。谁能帮我弄清楚它出了什么问题?如果我们不能使用 Local<Array>
那么还有什么可以实现这个目的呢?
如果不知道您针对的是哪个版本的 v8,则很难回答,但在当前的 doxygen 文档中,v8::Object::Get
:
有两个重载
MaybeLocal< Value > Get (Local< Context > context, Local< Value > key)
MaybeLocal< Value > Get (Local< Context > context, uint32_t index)
所以我认为您可以执行以下操作:
Local<Context> ctx = isolate->GetCurrentContext();
auto ele = array->Get(ctx, i);
...
我想从 js 端访问作为 arg 传入函数的数组元素。 代码是这样的:
void Method(const FunctionCallbackInfo<Value> &args){
Isolate* isolate = args.GetIsolate();
Local<Array> array = Local<Array>::Cast(args[0]);
for(int i=0;i<(int)array->Length();i++){
auto ele = array->Get(i);
}
我收到这个错误:
error: no matching function for call to ‘v8::Array::Get(int&)’
阅读 V8 数组的实现后,我了解到 Array
没有 Get
方法。
这里是Array在v8源码中的实现:
class V8_EXPORT Array : public Object {
public:
uint32_t Length() const;
/**
* Creates a JavaScript array with the given length. If the length
* is negative the returned array will have length 0.
*/
static Local<Array> New(Isolate* isolate, int length = 0);
/**
* Creates a JavaScript array out of a Local<Value> array in C++
* with a known length.
*/
static Local<Array> New(Isolate* isolate, Local<Value>* elements,
size_t length);
V8_INLINE static Array* Cast(Value* obj);
private:
Array();
static void CheckCast(Value* obj);
};
我是 v8 库的新手。我浏览了一些教程,对他们来说效果很好。谁能帮我弄清楚它出了什么问题?如果我们不能使用 Local<Array>
那么还有什么可以实现这个目的呢?
如果不知道您针对的是哪个版本的 v8,则很难回答,但在当前的 doxygen 文档中,v8::Object::Get
:
MaybeLocal< Value > Get (Local< Context > context, Local< Value > key)
MaybeLocal< Value > Get (Local< Context > context, uint32_t index)
所以我认为您可以执行以下操作:
Local<Context> ctx = isolate->GetCurrentContext();
auto ele = array->Get(ctx, i);
...