如何更新 Node.js 本机插件以使用新的 API?
How do I update a Node.js native addon to use the new API?
我的工作需要一个旧的 Node.js 本机插件,但不再适用于 Node.js 12 及更高版本,因为许多本机 API 已弃用。在几十个错误中,除了一个与初始化和调用回调函数有关的错误外,我已经修复了所有错误。新的 API 需要 4 个参数,而旧的有 3 个。这是损坏的代码:
void node_mpg123_feed_after (uv_work_t *req) {
Nan::HandleScope scope;
feed_req *r = (feed_req *)req->data;
Local<Value> argv[1];
argv[0] = Nan::New<Integer>(r->rtn);
Nan::TryCatch try_catch;
Nan::New(r->callback)->Call(Nan::GetCurrentContext()->Global(), 1, argv); //Compilation error in this line
// cleanup
r->callback.Reset();
delete r;
if (try_catch.HasCaught()) {
FatalException(try_catch);
}
}
具体来说,note the new API, which uses 4 arguments, and contrast it with the old one,只需要三个。我不知道要输入什么参数,因为互联网上基本上没有新 API 的教程,而且互联网上充斥着旧的损坏的例子。
谁能指出我正确的方向?我得到的确切错误消息是 error C2660: 'v8::Function::Call': function does not take 3 arguments
在我用上面的注释标记的行中。
在阅读 nan sources 的 nan 变更日志后,我发现了一种调用回调的新方法。具体来说,行:
Nan::New(r->callback)->Call(Nan::GetCurrentContext()->Global(), 1, argv);
变成
Nan::Call(Nan::New(r->callback), Nan::GetCurrentContext()->Global(), 1, argv);
我的工作需要一个旧的 Node.js 本机插件,但不再适用于 Node.js 12 及更高版本,因为许多本机 API 已弃用。在几十个错误中,除了一个与初始化和调用回调函数有关的错误外,我已经修复了所有错误。新的 API 需要 4 个参数,而旧的有 3 个。这是损坏的代码:
void node_mpg123_feed_after (uv_work_t *req) {
Nan::HandleScope scope;
feed_req *r = (feed_req *)req->data;
Local<Value> argv[1];
argv[0] = Nan::New<Integer>(r->rtn);
Nan::TryCatch try_catch;
Nan::New(r->callback)->Call(Nan::GetCurrentContext()->Global(), 1, argv); //Compilation error in this line
// cleanup
r->callback.Reset();
delete r;
if (try_catch.HasCaught()) {
FatalException(try_catch);
}
}
具体来说,note the new API, which uses 4 arguments, and contrast it with the old one,只需要三个。我不知道要输入什么参数,因为互联网上基本上没有新 API 的教程,而且互联网上充斥着旧的损坏的例子。
谁能指出我正确的方向?我得到的确切错误消息是 error C2660: 'v8::Function::Call': function does not take 3 arguments
在我用上面的注释标记的行中。
在阅读 nan sources 的 nan 变更日志后,我发现了一种调用回调的新方法。具体来说,行:
Nan::New(r->callback)->Call(Nan::GetCurrentContext()->Global(), 1, argv);
变成
Nan::Call(Nan::New(r->callback), Nan::GetCurrentContext()->Global(), 1, argv);