源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

用C/C++来实现 Node.js 的模块(二)

  • 时间:2022-04-16 20:39 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:用C/C++来实现 Node.js 的模块(二)
温故而知新,可以为湿矣   首先请大家记住这个 V8 的在线手册——http://izs.me/v8-docs/main.html。   还记得上次的 building.gyp 文件吗?
[url=http://izs.me/v8-docs/classv8_1_1Value.html#a6eac2b07dced58f1761bbfd53bf0e366]http://izs.me/v8-docs/classv8_1_1Value.html#a6eac2b07dced58f1761bbfd53bf0e366[/url])     // 的 `NumberValue` 函数     Local<Number> num = Number::New(args[0]->NumberValue() + args[1]->NumberValue());     return scope.Close(num); }
   函数大功告成!   最后把尾部的导出函数给写好就 OK 了。
[url=http://unschooled.org/2012/03/understanding-javascript-this/]http://unschooled.org/2012/03/understanding-javascript-this/[/url]   —— 摘自 StackOverflow   总之其作用就是指定了被调用函数的 this 指针。这个 Call 的用法就跟 JavaScript 中的 bind()、call()、apply() 类似。   所以我们要做的事情就是先把参数表建好,然后传入这个 Call 函数供其执行。   第一步,显示转换函数,因为本来是 Object 类型: Local<Function> cb = Local<Function>::Cast(args[0]);    第二步,建立参数表(数组): Local<Value> argv[argc] = { Local<Value>::New(String::New("hello world")) };  最后调用函数系列   调用 cb ,把参数传进去: cb->Call(Context::GetCurrent()->Global(), 1, argv);    这里第一个参数 Context::GetCurrent()->Global() 所代表的意思就是获取全局上下文作为函数的 this;第二个参数就是参数表中的个数(毕竟虽然 Node.js 的数组是有长度属性的,但是 C++ 里面数组的长度实际上系统是不知道的,还得你自己传进一个数来说明数组长度);最后一个参数就是刚才我们建立好的参数表了。 终章之结束文件系列   相信这一步大家已经轻车熟路了吧,就是把函数写好,然后放进导出函数里面,最后申明一下。   我就直接放出代码吧,或者直接跑去 Node.js 的文档看也行。
[u]复制代码[/u] 代码如下:
#include <node.h> using namespace v8; Handle<Value> RunCallback(const Arguments& args) {     HandleScope scope;     Local<Function> cb = Local<Function>::Cast(args[0]);     const unsigned argc = 1;     Local<Value> argv[argc] = { Local<Value>::New(String::New("hello world")) };     cb->Call(Context::GetCurrent()->Global(), argc, argv);     return scope.Close(Undefined()); } void Init(Handle<Object> exports, Handle<Object> module) {     module->Set(String::NewSymbol("exports"),         FunctionTemplate::New(RunCallback)->GetFunction()); }
NODE_MODULE(addon, Init)    Well done! 最后剩下的步骤就自己去吧。至于 Js 里面这么调用这个函数,我在之前已经提到过了。 番外   嘛嘛,我感觉我的学习笔记写得越来越奔放了求破~   今天就先写到这里吧,写学习笔记的过程中我又涨姿势了,比如说那个 Call 函数的参数意义。   如果你们觉得本系列学习笔记对你们还有帮助的话,就来和我一起搞基吧么么哒~Σ>―(〃°ω°〃)♡→
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部