范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Node。js插件编写(4)函数工厂与对象工厂的实现

  这篇文章我们通过通过nodejs插件完成 函数工厂和对象工厂的例子。
  首先看下面这段node.js代码 ,我们引用的my_node_addon插件需要导出
  createFunc函数 和 createObject函数, 并且 createObject函数返回的对象包含
  add和addCallback 两个加法函数var addon = require("bindings")("my_node_addon.node");   //函数工厂 var func=addon.createFunc()(1); console.log("Create  Function ret:" ,func);   //对象工厂 var obj = addon.createObject(); //调用对象方法 console.log(obj.add(3, 12)) //调用对象的额回调方法 obj.addCallback(1, 2, (ret) => {     console.log(ret); });
  插件源码main.cpp如下 #include    /**  * 加法  * @param info  * @return  */ Napi::Value Add(const Napi::CallbackInfo &info) {     //获取上下文环境     Napi::Env env = info.Env();     //如果参数少于2     if (info.Length() < 2) {         //js中丢出类型异常         Napi::TypeError::New(env, "Wrong number of arguments")                 .ThrowAsJavaScriptException();         return env.Null();     }     //如果存在参数不是number类型     if (!info[0].IsNumber() || !info[1].IsNumber()) {         Napi::TypeError::New(env, "Wrong arguments").ThrowAsJavaScriptException();         return env.Null();     }     //转换成dobule 类型参数     double arg0 = info[0].As().DoubleValue();     double arg1 = info[1].As().DoubleValue();     //返回number类型     Napi::Number num = Napi::Number::New(env, arg0 + arg1);     return num; }   /**  * 回调函数增加  * @param info  */ void CallbackAdd(const Napi::CallbackInfo &info) {     Napi::Env env = info.Env();     //如果参数少于2     if (info.Length() < 3) {         //js中丢出类型异常         Napi::TypeError::New(env, "Wrong number of arguments")                 .ThrowAsJavaScriptException();         return;     }     //如果存在参数不是number类型     if (!info[0].IsNumber() || !info[1].IsNumber()) {         Napi::TypeError::New(env, "Wrong arguments").ThrowAsJavaScriptException();         return;     }     //第三个参数不是函数     if (!info[2].IsFunction()) {         Napi::TypeError::New(env, "Wrong callback").ThrowAsJavaScriptException();         return;     }     auto v1 = info[0].As().DoubleValue();     auto v2 = info[1].As().DoubleValue();     Napi::Function cb = info[2].As();     cb.Call(env.Global(), {Napi::Number::New(env, v1 + v2)}); }   //创建函数 //Napi::Value func(const Napi::CallbackInfo &info){ //     Napi::Env &&env=info.Env(); //     auto v1=info[0].As(); //     return v1; //}   Napi::Function CreateFunction(const Napi::CallbackInfo& info) {     Napi::Env env = info.Env();     //lambda 函数 创建一个匿名函数     auto funcTmp=[](const Napi::CallbackInfo &info)->Napi::Value{         Napi::Env &&env=info.Env();         auto v1=info[0].ToString();         return v1;     };     //直接返回匿名函数     Napi::Function fn = Napi::Function::New(env, funcTmp);     return fn; }     Napi::Object CreateObject(const Napi::CallbackInfo &info) {     Napi::Env env = info.Env();     Napi::Object obj = Napi::Object::New(env);     obj.Set(Napi::String::New(env, "add"), Napi::Function::New(env, Add));     obj.Set(Napi::String::New(env, "addCallback"), Napi::Function::New(env, CallbackAdd));     return obj; }     //模块注册函数,用于每个自定义模块注册 Napi::Object Init(Napi::Env env, Napi::Object exports) {     //暴露方法     exports.Set(Napi::String::New(env, "createObject"), Napi::Function::New(env, CreateObject));     exports.Set(Napi::String::New(env,"createFunc"),Napi::Function::New(env,CreateFunction));     return exports; }     NODE_API_MODULE(addon, Init)
  如何编译插件不在啰嗦,请看前几篇文章,至此我们已经成功通过C++ 为nodejs 插件增加了 函数工厂 和对象工厂。

iPhone13加量不加价,但我却转身买了iPhone12!这是为何?最近好像大家都在讨论苹果的iPhone13,加量不加价。去年的iPhone1264G128G的售价分别为6299元和6799元。而今年iPhone13的128G入门版本直接给干到5买完iPhone13Pro高配版入手AirPodsPro钱不够用啦?试试这款平替最近大家入手的iPhone13都已经到货了吗?由于苹果的环保政策,iPhone13的包装盒里只有手机和一根数据线,为了第一时间愉快地用上新手机,用户们不得不提前备好一些周边配件。除iPadmini果冻屏在9月15日的苹果新品发布会上,全新版本的iPadmini正式亮相。新一代iPadmini不仅采用了全新的全面屏设计,还配备了最新的A15仿生处理器,吸引了不少用户的青睐。iPad电脑用久了卡顿反应慢?试试以下5种方法,让你的电脑恢复流畅很多人在电脑卡顿的时候,只会一键按下开关键重启解决卡顿问题。其实这都是属于比较简单的方法,今天就来教大家几招。当面对电脑卡顿时,怎样快速恢复流畅度。1性能管理电脑的功能有很多,单纯十一换机还用挑?魅族连发三款新品满足你需求九月作为秋季换机潮的开始,各大厂商推出了主打各方面的旗舰机,魅族作为知名品牌,自然也不会落后,九月二十二日魅族有点东西发布会召开,推出了三款全新的旗舰机型魅族18s魅族18sPro自带8G内存和NFC的西圣X1骨传导耳机,竟然200出头前言现在越来越多的人喜欢骨传导耳机了,因为骨传导耳机的防水性能更好,适用的场景更多,而且佩戴无感,这就使很多人关注着这种耳机。前段时间我介绍过一款自带内存的骨传导耳机,现在我要给大蓝牙耳机音质终于不是渣渣!有线耳机会消失吗AirPods出现后,蓝牙耳机一下子成为了明星产品。然而,蓝牙耳机是不是真的靠谱?在很多资深音频爱好者的眼中,绝大多数蓝牙耳机,都属于缺点明显的产品蓝牙耳机固然方便,但它在价格续航iPhone13只能用3年?官方回复太坑了这段时间,每天都有同学在后台问我我的iPhone6s还能用几年?我的iPhoneX还能用几年?我的iPhone还能用几年?别问了别问了,只要你秉持着能用就好的理念,iPhone4都郭明錤对苹果的最新报告郭明錤最新报告2022年上半年,搭载苹果自研处理器MacBook将被砍单约15。原因包括零组件短缺(最严重的是电源IC)后新冠疫情时代的需求结构改变新旧产品转换。他还认为,搭载苹果索尼新机即将来临,渲染图已曝光,5900mAh4K对于国内用户来说,很少听过索尼手机,了解最多的依然是游戏机和相机,但索尼手机确确实实存在,只不过大多数机型均为高端机型,主要市场并不在国内,所以很有有人了解。索尼手机主打影像旗舰,联想新品发布会圆满落幕!狂发五款笔记本4399元起CNMO新闻9月28日,CNMO了解到,联想召开了新品发布会!在发布会上,联想相关人员为我们带来了五款笔记本产品,分别是联想YOGA13s(2021锐龙版)联想小新Air14Plu
流量造假的罪与罚法学茶座流量一般是指用户对网站或网站上的产品服务的访问数量,通常包括独立用户数量总用户数量浏览网页的总数量每个用户或特定群体用户浏览网页的数量用户在网站或网页的停留时间等。流量在一马云外滩金融讲话存误导最近马云在外滩金融讲话又开始火热了,我听完演讲内容以后,似乎听起来蛮有道理。仔细一想实际上存在诸多问题。第一,提到的金融监管问题,实际上就是认为金融政策应该多些包容,让企业多创新,物联网相关白皮书IOT安全威胁报告(2018)腾讯。pdf2020年联网智能设备安全态势报告。pdf2020物联网安全年报绿盟。pdf2021年中国ALoT产业全景图谱报告物联网智库。pdf物联网Rosenblatt将苹果(AAPL。US)目标价从184美元下调至168美元Rosenblatt将苹果(AAPL。US)目标价从184美元下调至168美元。苹果(AAPL。US)公司简介苹果公司从事设计制造和销售智能手机个人电脑平板电脑可穿戴设备和配件,以寒武纪2022年第一季度亏损2。87亿同比亏损增加股份支付费用增加挖贝网5月3日,寒武纪(688256)发布2022年第一季度报告,报告期内公司实现营业收入62,990,732。03元,同比增长74。34归属于上市公司股东的净利润287,383,小米上架有线机械键盘众筹,149元5月3日消息,小米商城上线了一款全新的小米有线机械键盘,目前开启了众筹预热。根据官方的消息,这一款新产品将会在5月4日10点开启众筹,日常零售价169元,众筹价149元。根据官方的PotPlayer播放器MP3流行于2000年前后,那时候就算是CD也要转换成MP3来听,因为当时MP3就是一种时尚,你听其它格式的音乐会被认为是很low的,学生更是人手一个MP3播放器用来学英语。渐渐的Win10打开软件每次都要询问,怎么设置不弹窗询问?Win10打开软件每次都要询问,怎么设置不弹窗询问?很多朋友使用Win10系统的时候发现每次打开某些软件时会弹出询问窗口,一般都是带小盾牌的软件才会弹出窗口进行询问,win10打开LeetCode每日一题136。只出现一次的数字题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?示例1输马斯克收购推特,和圆周率有什么联系?马斯克用了440亿美元收购推特100的股份,这就意味着,推特这只鸟,从笼中解放。我们许多人,看到这则新闻的时候,其实内心并没有多大的波澜,甚至觉得和自己没啥关系。当你这样觉得的时候迦南智能2022年第一季度净利1598。84万同比增长4。26出货量增加挖贝网5月1日,迦南智能(300880)发布2022年第一季度报告,报告期内公司实现营业收入118,708,067。17元,同比增长50。41归属于上市公司股东的净利润15,988