您好,欢迎访问沃航(武汉)科技有限公司官方网站
nodejs通过n api开发C语言模块(三)
2019-06-28 23:36:11

前几天我们了解了如何通过n api返回nodejs的对象给nodejs,今天我们来介绍一下如何接收nodejs传过来的数据。

例如,当我运行nodejs代码:

let ts = require('./test.node')
ts.ShowVersion('hello world')

我们送入了一个参数'hello world',如何让n api部分接收到呢,这里就需要一个函数名为napi_get_cb_info,它用于接收由nodejs送下来的参数。

函数原型如下:

napi_status napi_get_cb_info(napi_env env, // C执行函数的env,直接送过来即可
                             napi_callback_info cbinfo, // C执行函数的info,直接送过来即可
                             size_t* argc, // 这个参数即是输入参数,又是输出参数,需要对他初始化用于告诉函数有几个参数
                             napi_value* argv, // 这个是用于读取nodejs送下来的参数的
                             napi_value* thisArg, // 送函数上下文,这个参数可以为null
                             void** data) // 接收数据指针,这个我也没用过,通常直接设置为null

上面的例子参数很简单,可以将参数直接使用napi_get_value_string_utf8解析,解析代码如下:

napi_value ShowVersion(napi_env env, napi_callback_info info) {
    size_t argc = 1;
    napi_value argv[1];
    napi_get_cb_info (env, info, &argc, argv, NULL, NULL);
    char buff[32];
    napi_get_value_string_utf8(env, argv[0], buff, sizeof(buff), NULL);
    printf("buff: %s\n", buff);
    return NULL;
}

那么,如果有两个参数呢?并且类型不同,例如:

let ts = require('./test.node')
ts.ShowVersion('hello world', 6)

这个例子中,输入了两个参数,一个是字符串类型,另一个是数字类型。

napi_value ShowVersion(napi_env env, napi_callback_info info) {
    size_t argc = 2;
    napi_value argv[2];
    napi_get_cb_info (env, info, &argc, argv, NULL, NULL);
    char buff[32];
    napi_get_value_string_utf8(env, argv[0], buff, sizeof(buff), NULL);
    printf("buff: %s\n", buff);
    int32_t num;
    napi_get_value_int32(env, argv[1], &num);
    printf("num: %d\n", num);
    return NULL;
}

其执行效果如下:

F:\BaiduYunDownload\nodetest>node test.js

buff: hello world

num: 6


文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn