国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++編寫node的addon(7) --object wrap

2019-11-08 18:51:00
字體:
來源:轉載
供稿:網友

1.環境

Ubuntu 14.04

node 4.5.0

node-gyp 3.4.0

2.項目

新建項目,加入組件nan和bindings

方法一、在項目文件的node_modules中復制組件nan和bindings的全部代碼包;

方法二、在package.json的dependencies中加入這兩個組件,用nmp安裝

3.c++源碼

//myobject.h#ifndef MYOBJECT_H#define MYOBJECT_H#include <nan.h>class MyObject : public Nan::ObjectWrap { public:  static void Init(v8::Local<v8::Object> exports); PRivate:  explicit MyObject(double value = 0);  ~MyObject();  static void New(const Nan::FunctionCallbackInfo<v8::Value>& info);  static void GetValue(const Nan::FunctionCallbackInfo<v8::Value>& info);  static void PlusOne(const Nan::FunctionCallbackInfo<v8::Value>& info);  static void Multiply(const Nan::FunctionCallbackInfo<v8::Value>& info);  static Nan::Persistent<v8::Function> constructor;  double value_;};#endif

//myobject.cc#include "myobject.h"Nan::Persistent<v8::Function> MyObject::constructor;MyObject::MyObject(double value) : value_(value) {}MyObject::~MyObject() {}void MyObject::Init(v8::Local<v8::Object> exports) {  Nan::HandleScope scope;  // Prepare constructor template  v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New);  tpl->SetClassName(Nan::New("MyObject").ToLocalChecked());  tpl->InstanceTemplate()->SetInternalFieldCount(1);  // Prototype  Nan::SetPrototypeMethod(tpl, "value", GetValue);  Nan::SetPrototypeMethod(tpl, "plusOne", PlusOne);  Nan::SetPrototypeMethod(tpl, "multiply", Multiply);  constructor.Reset(tpl->GetFunction());  exports->Set(Nan::New("MyObject").ToLocalChecked(), tpl->GetFunction());}void MyObject::New(const Nan::FunctionCallbackInfo<v8::Value>& info) {  if (info.IsConstructCall()) {    // Invoked as constructor: `new MyObject(...)`    double value = info[0]->IsUndefined() ? 0 : info[0]->NumberValue();    MyObject* obj = new MyObject(value);    obj->Wrap(info.This());    info.GetReturnValue().Set(info.This());  } else {    // Invoked as plain function `MyObject(...)`, turn into construct call.    const int argc = 1;    v8::Local<v8::Value> argv[argc] = { info[0] };    v8::Local<v8::Function> cons = Nan::New<v8::Function>(constructor);    info.GetReturnValue().Set(cons->NewInstance(argc, argv));  }}void MyObject::GetValue(const Nan::FunctionCallbackInfo<v8::Value>& info) {  MyObject* obj = ObjectWrap::Unwrap<MyObject>(info.Holder());  info.GetReturnValue().Set(Nan::New(obj->value_));}void MyObject::PlusOne(const Nan::FunctionCallbackInfo<v8::Value>& info) {  MyObject* obj = ObjectWrap::Unwrap<MyObject>(info.Holder());  obj->value_ += 1;  info.GetReturnValue().Set(Nan::New(obj->value_));}void MyObject::Multiply(const Nan::FunctionCallbackInfo<v8::Value>& info) {  MyObject* obj = ObjectWrap::Unwrap<MyObject>(info.Holder());  double multiple = info[0]->IsUndefined() ? 1 : info[0]->NumberValue();  v8::Local<v8::Function> cons = Nan::New<v8::Function>(constructor);  const int argc = 1;  v8::Local<v8::Value> argv[argc] = { Nan::New(obj->value_ * multiple) };  info.GetReturnValue().Set(cons->NewInstance(argc, argv));}
//addon.cc#include <nan.h>#include "myobject.h"void InitAll(v8::Local<v8::Object> exports) {  MyObject::Init(exports);}NODE_MODULE(addon, InitAll)4.binding.gyp

{	"targets" : [		{			"target_name": "addon",			"sources":["addon.cc", "myobject.cc"],			"include_dirs":[				"<!(node -e /"require('nan')/")"			]		}	]}5.js源碼

var addon = require('bindings')('addon');var obj = new addon.MyObject(10);console.log(obj.plusOne());console.log(obj.plusOne());console.log(obj.plusOne());console.log(obj.multiply().value());console.log(obj.multiply(10).value());var newobj = obj.multiply(-1);console.log(newobj.value());console.log(obj === newobj);6.編譯addon

cd到源碼目錄下

node-gyp configure build   7.執行

cd 到源碼目錄下

node hello.js
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 阳朔县| 响水县| 东源县| 涟源市| 盖州市| 晋宁县| 宁明县| 揭西县| 浮山县| 固安县| 马尔康县| 崇信县| 行唐县| 横峰县| 广安市| 皮山县| 昆明市| 柘荣县| 阿巴嘎旗| 吕梁市| 资溪县| 竹北市| 嘉峪关市| 华蓥市| 陇川县| 吴桥县| 盐亭县| 兴化市| 林州市| 兴安县| 信丰县| 通州区| 杭锦后旗| 平和县| 浦江县| 南京市| 红桥区| 大连市| 锡林浩特市| 厦门市| 淄博市|