Napi::CallbackInfo Napi::Env

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Napi::Value EncryptPassword(const Napi::CallbackInfo& info)
{
        Napi::Env env = info.Env();
    /*
    Napi::Env env = info.Env();
    if (info.Length() < 2)
    {
        Napi::TypeError::New(env, "参数个数异常").ThrowAsJavaScriptException();
        return env.Null(); // 返回JavaScript的null
    }
    if (!info[0].IsNumber() || !info[1].IsNumber())
    {
        Napi::TypeError::New(env, "参数类型异常").ThrowAsJavaScriptException();
        return env.Null();
    }
    // Napi::Value -> Napi::Number
    double arg0 = info[0].As<Napi::Number>().DoubleValue();
    double arg1 = info[1].As<Napi::Number>().DoubleValue();
    double sum = Securekit::EncryptPassword(arg0, arg1);
    Napi::Number result = Napi::Number::New(env, sum);
    */
   // return result;
    double sum = 1;
    Napi::Number result = Napi::Number::New(env, sum);
      return result;
}

 

以上代码是一个 C++ 函数 EncryptPassword,使用了 N-API 来与 JavaScript 进行交互。下面是对代码进行详细解释:

  1. EncryptPassword 函数的参数是一个 Napi::CallbackInfo 对象,它提供了与 JavaScript API 交互所需的一些信息,例如调用函数时传入的参数和环境上下文等。

  2. Napi::Env env = info.Env(); 用于获取 N-API 的环境变量,通过 info.Env() 方法获取当前函数调用的环境变量。

  3. if (info.Length() < 2) 检查传入的参数个数,如果参数个数少于 2,则抛出 JavaScript 异常并返回 null

  4. if (!info[0].IsNumber() || !info[1].IsNumber()) 检查参数类型,如果参数不是数字类型,则抛出 JavaScript 异常并返回 null

  5. double arg0 = info[0].As<Napi::Number>().DoubleValue(); 将参数转换为数字类型,并通过 DoubleValue() 获取其值。

  6. double sum = Securekit::EncryptPassword(arg0, arg1); 调用 Securekit 类的静态函数 EncryptPassword,传入参数 arg0arg1 进行计算,并将结果保存在 sum 变量中。

  7. Napi::Number result = Napi::Number::New(env, sum); 使用 N-API 的 Napi::Number::New 方法将计算结果 sum 转换为 JavaScript 中的数字类型。

  8. return result; 返回计算结果给 JavaScript。

总而言之,以上代码用于将 JavaScript 中的两个数字参数传递给 Securekit 类的静态函数 EncryptPassword 进行加密计算,并将结果以数字类型返回给 JavaScript 调用方。在过程中,如果传入的参数不符合要求,将抛出异常并返回 null,以避免程序出现错误。

posted on   lydstory  阅读(84)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2023-03-28 sdwan
2023-03-28 IKE与IPSec详解
2022-03-28 Common C++
2019-03-28 filedisk.sys
2019-03-28 ext2fsd window读ext驱动
2019-03-28 客户端服务端web问题
2019-03-28 文件目录过滤隐藏

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示