将类实例函数绑定到v8 :: FunctionTemplate

时间:2019-06-02 23:16:18

标签: javascript c++ node.js v8 function-templates

我一般来说对C ++和v8还是很陌生,我想构建一个本机的node.js插件,但是现在我被困在一个非常简单的IMO上,但是我无法弄清楚问题出在哪里,错误消息

C:\Path\To\Project\File.cpp(50): error C2664: 'v8::Local<v8::FunctionTemplate> v8::FunctionTemplate::New(v8::Isolate *,v8::FunctionCallback,v8::Local<v8::Value>,v8::Local<v8::Signature>,int,v8::ConstructorBehavior,v8::SideEffectType)': cannot convert argument 2 from 'v8::Local<v8::Value> (__cdecl *)(const v8::FunctionCallbackInfo<v8::Value> &)' to 'v8::FunctionCallback' [C:\Path\To\Project\build\node_gui.vcxproj]

不是很有帮助。

我有以下代码,

v8::Local <v8::Object> Window::GetFunctions() {
    v8::Local <v8::Object> DrawFunctions = v8::Object::New(isolate);


    v8::Local <v8::FunctionTemplate> bgfnc = v8::FunctionTemplate::New(isolate, &Window::BackgroundCB);

    DrawFunctions->Set(v8::String::NewFromUtf8(isolate, "background"), bgfnc);

    return DrawFunctions;
}

void Window::Background(const v8::FunctionCallbackInfo <v8::Value> &args) {
    v8::Isolate *isolate = args.GetIsolate();
    renderer->Background(args[0]->NumberValue(), args[1]->NumberValue(), args[2]->NumberValue());
}

v8::Handle <v8::Value> BackgroundCB(const v8::FunctionCallbackInfo <v8::Value> &args) {
    return ((Window*)v8::External::Cast(*(args.Data())->Value())->Background());
}

我想创建一个包含函数列表的对象,这些函数的回调将是Window类的成员函数。我知道在here之前曾有人问过这个问题,该问题曾经使用非成员函数工作过,但在其他情况下则无效。

谢谢

Sidenote :对于适合初学者的v8文档,我已经走了很多路,nodesource并没有解释参数的含义,或者很少给出如何使用参数的详尽示例。函数/类,如果有人知道一些更好的文档,那就太好了,谢谢。

0 个答案:

没有答案