将c++函数绑定到V8时调用SetAccessor出错
Error calling SetAccessor when binding C++ functions to V8
为了从JavaScript调用c++,我遵循了V8的嵌入式指南。我遇到了设置访问器的错误。具体来说,以下代码无法在VS2015的V8当前版本下为我编译。
point_templ.SetAccessor(String::NewFromUtf8(isolate, "x"), GetPointX, SetPointX);
如果我把它改成:
,我可以让它像预期的那样工作point_templ->SetAccessor(String::NewFromUtf8(isolate, "x"), GetPointX);
我就是不能让它接受setter函数。我得到一个错误,说明"没有重载函数的实例"v8::ObjectTemplate::SetAccessor"匹配参数列表"。为了记录,我没有修改指南中的示例函数。它们如下(从指南中复制):
void GetPointX(Local<String> property, const PropertyCallbackInfo<Value>& info)
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
void* ptr = wrap->Value();
int value = static_cast<Point*>(ptr)->x_;
info.GetReturnValue().Set(value);
}
void SetPointX(Local<String> property, Local<Value> value, const PropertyCallbackInfo<Value>& info)
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
void* ptr = wrap->Value();
static_cast<Point*>(ptr)->x_ = value->Int32Value();
}
setter所需的函数签名与指南中不同吗?
我将把这里留给那些试图遵循指南的人:setter 的函数签名是错误的,但是如果你浏览得太快,你会错过它。指南的setter为:
void SetPointX(Local<String> property, Local<Value> value, const PropertyCallbackInfo<Value>& info)
函数签名实际上应该是:
void SetPointX(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info)
请注意,它是void而不是Value(并且它是point_templ->SetAccessor(),而不是point_templ.SetAccessor())。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- 在使用NAN的Node.js的C++模块中未调用SetAccessor函数
- 将c++函数绑定到V8时调用SetAccessor出错