首页 > 其他分享 >某函数传参

某函数传参

时间:2024-04-13 22:44:07浏览次数:17  
标签:传参 status ok 函数 value env GetAddCheckArg napi

在 N-API 中直接从一个函数向另一个函数传递参数稍微有点复杂,因为你需要正确地处理 napi_value 数组和环境 (napi_env)。如果你想在一个 N-API 函数 (CallAddFunction) 中构造参数并直接调用另一个 N-API 函数 (GetAddCheckArg),并且管理这些参数的传递,你将需要手动构建一个新的 napi_callback_info 或者简化参数的直接传递方式。

由于 N-API 不直接支持构造 napi_callback_info(这是一个内部结构,通常由 Node.js 的引擎在调用回调时自动填充),我们通常会通过简化方法:直接构建参数数组并通过封装的函数接口直接传递。我们可以重新设计 GetAddCheckArg,使其接受 napi_env 和参数数组,而不是通过 napi_callback_info

1. 修改 GetAddCheckArg 接收 napi_envnapi_value 数组

这种方式需要修改 GetAddCheckArg 的签名,以便它能够直接接收参数数组和参数数量。

#include <node_api.h>
#include <assert.h>

napi_value GetAddCheckArg(napi_env env, size_t argc, napi_value* argv) {
    if (argc < 2) {
        napi_throw_type_error(env, NULL, "Function expects two arguments");
        return NULL;
    }

    int32_t num1, num2;
    napi_status status = napi_get_value_int32(env, argv[0], &num1);
    assert(status == napi_ok);
    status = napi_get_value_int32(env, argv[1], &num2);
    assert(status == napi_ok);

    napi_value result;
    int32_t sum = num1 + num2;
    status = napi_create_int32(env, sum, &result);
    assert(status == napi_ok);

    return result;
}

2. 在 CallAddFunction 中调用修改后的 GetAddCheckArg

napi_value CallAddFunction(napi_env env, napi_callback_info info) {
    napi_value args[2];
    napi_status status;

    // 创建两个整数 napi_value
    status = napi_create_int32(env, 5, &args[0]);
    assert(status == napi_ok);
    status = napi_create_int32(env, 10, &args[1]);
    assert(status == napi_ok);

    // 调用 GetAddCheckArg 并直接传递参数数组
    napi_value result = GetAddCheckArg(env, 2, args);

    return result;
}

3. 注册这些函数到 Node.js 模块

你需要更新初始化函数以注册 CallAddFunction

napi_value Init(napi_env env, napi_value exports) {
    napi_status status;
    napi_value fn1, fn2;

    status = napi_create_function(env, "add", NAPI_AUTO_LENGTH, GetAddCheckArg, NULL, &fn1);
    assert(status == napi_ok);
    status = napi_set_named_property(env, exports, "add", fn1);
    assert(status == napi_ok);

    status = napi_create_function(env, "callAdd", NAPI_AUTO_LENGTH, CallAddFunction, NULL, &fn2);
    assert(status == napi_ok);
    status = napi_set_named_property(env, exports, "callAdd", fn2);
    assert(status == napi_ok);

    return exports;
}

这样,你就可以在 Node.js 环境中直接调用 CallAddFunction,它会进一步调用 GetAddCheckArg

标签:传参,status,ok,函数,value,env,GetAddCheckArg,napi
From: https://www.cnblogs.com/nameyouxuan/p/18133522

相关文章

  • hive窗口分析函数使用详解系列二之分组排序窗口函数
    1.综述我们讨论面试中各大厂的SQL算法面试题,往往核心考点就在于窗口函数,所以掌握好了窗口函数,面对SQL算法面试往往事半功倍。已更新第一类聚合函数类,点击这里阅读hive窗口函数聚合函数类本节介绍Hive聚合函数中的第二类聚合函数:分组排序窗口函数。这些函数的用法不仅仅适用于......
  • 2024-04-13:用go语言,给定一个整数数组 `nums`, 请编写一个函数,返回一个新的数组 `counts
    2024-04-13:用go语言,给定一个整数数组nums,请编写一个函数,返回一个新的数组counts。满足以下条件:对于每个nums[i],counts[i]表示在nums[i]右侧且比nums[i]小的元素数量。输入:nums=[5,2,6,1]。输出:[2,1,1,0]。答案2024-04-13:来自左程云。灵捷3.5大体过程如下:给定......
  • C与C++在函数和数据的比较
    C与C++在函数和数据的比较CData(struct)数据是一个类型->根据数据的类型创建出真正的数据Function函数就是用来处理数据的缺陷:语言没提供关键字.所以数据是全局的->各个函数都可以处理数据C++Data将数据和处理这些数据的函数包裹在一起,其他函数看不到其他函数处理......
  • Python通过函数名调用函数的几种场景
    除了执行系统命令外,我们有时还需要动态地执行一些python代码,有经验的朋友就会知道可以使用内置函数eval实现这一需求,如eval("print(__file__)"),这还是比较简单的。但如果要动态执行一个函数,讲的资料就会少一点,这次就要看这个需求该如何实现。一、通过eval实现1通过eval调用同......
  • Python函数
    函数定义和调用defadd(x,y):#先定义ans=x+yreturnans#返回ansadd(4,5)#后调用注:定义函数时的“x和y”为形式参数,调用函数时的“4和5”为实际参数,当调用函数时,将实际参数“4和5”传递给形式参数“x和y”。None类型defsay_hello():#定义......
  • C# 给windows服务传参
    示例,windows服务publicpartialclassMyService:ServiceBase{publicMyService(){InitializeComponent();}protectedoverridevoidOnStart(string[]args){//这里的args数组包含了传递给服务的参数if(args.Lengt......
  • 【面试准备】窗口函数学习
    昨天面试,技术问的比较简单,甚至没有问算法。业务的话,应该是我没有过面的主要原因,后续展开分析#技术:唯一难倒我的是一个sql##题目:员工表找出每个部门员工年龄最大的两个员工。在MySQL中,你可以使用窗口函数来查询每个部门年龄最大的两名员工。MySQL8.0及以上版本支持窗口函数。以......
  • C++ 解引用与函数基础:内存地址、调用方法及声明
    C++解引用获取内存地址和值在上一页的示例中,我们使用了指针变量来获取变量的内存地址(与引用运算符&一起使用)。但是,你也可以使用指针来获取变量的值,这可以通过使用*运算符(解引用运算符)来实现:stringfood="Pizza";//变量声明string*ptr=&food;//指针声明//引用......
  • 汇编语言简易教程(11):函数与栈帧
    汇编语言简易教程(11):函数与栈帧需要注意.这里的函数指的是汇编语言(yasm)的函数,但对理解其他高级语言的函数在汇编中的实现会有很大的帮助.函数和过程(即空函数)有助于将程序分解为更小的部分,从而更容易编码、调试和维护。函数调用涉及两个主要操作:函数链接由于可以......
  • 9.lua中的函数
    1.函数的基本形式[]:表示可选functionf([参数列表])函数体[returna,b,c]//可以同时返回多个值end2.固定参数functionf(a,b) print(a,b)endf(1)f(1,2)f(1,2,3)输出结果如下:1 nil1 21 23.可变参函数functionf(...) locala,b=... print(a,b)end......