从c++ addon看napi的实现
发布日期:2021-05-09 16:00:00 浏览次数:23 分类:精选文章

本文共 5289 字,大约阅读时间需要 17 分钟。

Node.js NAPI���������������������C++������������JavaScript������

1. ���������������JavaScript������

���Node.js���������C++���������������������Node.js Addon Module Protocol���NAPI������������������������������������C++������������������������������JavaScript������������������������������������������������C++���������������������Node.js������������������NAPI������������������������

#include 
NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

������������NAPI���������������������������������������������Init���������������������������������������������������������������������

napi_value Init(napi_env env, napi_value exports) {
napi_value func;
if (napi_create_function(env, NULL, NAPI_AUTO_LENGTH, newArray, NULL, &func) == napi_ok) {
napi_set_named_property(env, exports, "getArray", func);
}
return exports;
}

2. ������newArray������

newArray���������������JavaScript���������������������������������������������������������������������������������������������������

static napi_value newArray(napi_env env, napi_callback_info info) {
size_t argc = 1;
napi_get_cb_info(env, info, &argc, args, NULL, NULL);
napi_get_value_int32(env, args[0], &len);
napi_value ret;
napi_create_array(env, &ret);
for (int i = 0; i < len; ++i) {
napi_value num = napi_create_int32(env, i, &num);
napi_set_element(env, ret, i, num);
}
return ret;
}

������������������������������������

  • ���args���������������������������������������������������������
  • ���JavaScript������������������������������������������������
  • ������napi_create_array���������������������������
  • ���������������������������������������������������������������
  • ���������������������������
  • 3. ���JavaScript���������������C++������

    ������JavaScript���������������������C++������������������������������������������������������������������������������������������������������������

    const { getArray } = require('./build/Release/test.node');
    console.log(getArray(20));

    4. ���������������NAPI������

    NAPI������������������������API������������JavaScript���C++������������������������������������napi_create_array������������������������NAPI������������������

    napi_status napi_create_array(napi_env env, napi_value* result) {
    return napi_clear_last_error(env);
    }

    ���������������������������������������������������������V8���������������������������������������������������NAPI������������������NAPI������������������������

  • ���������������������NAPI���������������������napi_env���������������V8���������������������������
  • ���������������NAPI���������������������������������������������������������napi_set_last_error������������������������
  • ������V8���������NAPI������������������������V8���������������������v8::Array::New������V8���������������NAPI���������
  • ���������������������NAPI���������������������������������������������������������������napi_set_last_error���������������������
  • 5. NAPI���������������������

    1. ������������

    ������NAPI������������������������������

    • napi_env env���V8���������������������������
    • ���������������������������������������������������������

    2. ������������

    NAPI������������������������������������������������������napi_status������������������������������������������������������������������

    • napi_ok������������������
    • ���������������������napi_set_last_error���������������������

    3. ������������

    ������NAPI���������������������������������������

    napi_status napi_set_element(napi_env env, napi_value object, uint32_t index, napi_value value) {
    v8::Local
    context = env->context();
    v8::Local
    obj;
    CHECK_TO_OBJECT(env, context, obj, object);
    v8::Local
    val = v8impl::V8LocalValueFromJsValue(value);
    auto set_maybe = obj->Set(context, index, val);
    RETURN_STATUS_IF_FALSE(env, set_maybe.FromMaybe(false), napi_generic_failure);
    return napi_ok;
    }

    ���������������������������������

  • ���NAPIobject���������V8���v8::Object���������
  • ������������value���NAPI���������������V8������������
  • ������V8���������Set������������������������������
  • 4. ������������

    NAPI������������������������������������������������������������napi_set_last_error���������������������������������������������napi_get_last_error_info���������������������������������������������

    napi_status napi_get_last_error_info(napi_env env, const napi_extended_error_info** result) {
    *result = &env->last_error;
    return napi_ok;
    }

    5. v8������������

    NAPI������������������V8���������������������v8::Array::New������V8���������������������������������������������������������������������������������������������������������

    6. ������

    ���������������������������������������������������������NAPI������������������������

  • NAPI������C++���������JavaScript���V8���������������
  • ������NAPI������������������
    • ���������������������������
    • ������������������������������������
  • NAPI���������������V8������������������������������������������������������
  • ������NAPI������������������������������������������������������������
  • NAPI������������C++���������JavaScript��������������� npm away���������������������������V8������API������������

    ���������������������������������js_native_api_v8.cc���������������������������������������������������������NAPI������������������������������������������actionable������������

    上一篇:从linux5.9看icmp的处理流程
    下一篇:聊一下Node.js中NAPI的napi_value

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月24日 11时27分08秒