赞
踩
在上一章中提到了如何使用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;
}
在上一章中我们已经提到过使用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 // 接收数据指针
);
需要注意的是,若参数的个数大于请求的数量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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。