当前位置:   article > 正文

Node.js N-API获取方法参数_napi_get_cb_info

napi_get_cb_info

上一章中提到了如何使用N-API进行Node.js Native模块的开发,介绍了使用napi_create_string_utf8方法创建一个UTF-8编码字符串并将其作为返回值返回。在本文中将继续这个话题介绍Node.js调用C/C++通过N-API实现的native方法时,获取其参数的操作。

实现目标

在本节中,将通过N-API实现一个add方法,其接受两个number类型的参数,并返回二者之和。add方法的实现等同于下列Javascript代码。

function add(a, b) {
   
  if (arguments.length < 2) {
   
    throw new TypeError('Wrong number of arguments');
  }

  if (typeof a !== 'number' || typeof b !== 'number') {
   
    throw new TypeError('Wrong arguments');
  }

  return a + b;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

实现方式

在上一章中我们已经提到过使用N-API定义方法时接受的参数为(napi_env, napi_callback_info),其中napi_callback_info为上下文的信息。我们可以通过napi_get_cb_info方法从napi_callback_info类型的参数中得到回调的参数等数据。napi_get_cb_info的函数原型如下:

napi_status napi_get_cb_info(
  napi_env env,
  napi_callback_info cbinfo, // 传入回调函数的回调信息
  size_t *argc, // 作为入参传入`argv`数组的大小,并将接收实际的参数个数
  napi_value *argv, // 存放参数的buffer
  napi_value *this_arg, // Javascript中的`this`
  void** data // 接收数据指针
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

需要注意的是,若参数的个数大于请求的数量argc,将只复制argc的值所指定数量的参数只argv中。例如在下列代码中将请求的参数个数argc的值设为0,后续调用napi_typeof时将得到napi_invalid_arg错误,原因是未复制参数至buffer中。若实际的参数个数小于请求的数量,将复制全部的参数并使用napi_value类型所表示的undefined值填充。

在了解了napi_get_cb_info方法后,我们就可以使用它来获取add方法的参数了。对于add方法,需要两个数值类型的参数,所以在调用napi_get_cb_info方法前,我们声明了size_t类型的argc变量用于存放我们需要的参数个数以及接收实际的参数个数,并声明了napi_value类型的数组argv用于存放参数的值,其长度为我们需要的参数个数的值。

size_t argc = 2;
napi_value argv[2
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/69054
推荐阅读
相关标签
  

闽ICP备14008679号