将节点NAPI函数添加为对本机库的回调

编程入门 行业动态 更新时间:2024-10-09 07:18:55

将节点NAPI函数添加为对本<a href=https://www.elefans.com/category/jswz/34/1630616.html style=机库的回调"/>

将节点NAPI函数添加为对本机库的回调

是否可以将JavaScript函数作为回调添加到通过NAPI接受回调的本机库中?

这里是我到目前为止的示例附加代码。


Napi::Function *jsCallback;
void RegisterReadyEvent(const Napi::CallbackInfo &info)
{
    Napi::Function callback = info[0].As<Napi::Function>();
    jsCallback = &jsCallback;

    // native library function for registering callback
    callback_add(OnReadyCallback);
}

void OnReadyCallback(Args *arg)
{
   jsCallback->Call();
}

Napi::Object InitAll(Napi::Env env, Napi::Object exports)
{
    exports.Set(String::New(env, "onReady"), Function::New(env, RegisterReadyEvent));
    return exports;
}

问题是声明的顺序。似乎OnReadyCallback必须在RegisterReadyEvent函数之前声明,否则将无法编译。但是,如果我在RegisterReadyEvent之前声明它,则jsCallback变成一个空指针,并且仍然无法编译。

或者是否有更好且适当的方法来实现同一目标?

回答如下:

似乎C库具有void *data作为状态占位符。显然,这是C库中公开回调的规范。

通过Napi :: Function作为参考。

callback_add(OnReadyCallback, &callback);

然后将其退回。

void OnReadyCallback(Args *arg, void *data)
{
   ((Napi::Function *)data)->Call({});
}

更多推荐

将节点NAPI函数添加为对本机库的回调

本文发布于:2024-05-07 07:04:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755003.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:机库   节点   回调   函数   NAPI

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!