作者:小黑
上篇文章中介绍了nodejs与C/C++模块的结合,那么怎么来和模块之间收发数据,这是本文即将介绍的内容。如果你打算学习使用v8引擎,那么你应该详细的看看。如果你想看看本文到底说了些啥,那么,请直接看总结部分。
一、开发前准备
然后选一个文件夹,给今天的分享建立一个工程目录,我这里取名为/addon_3_11
并在工程目录中新建立一个binding.gyp文件,内容暂时为空吧,之后有用。
方便测试,在根目录中新建一个test.js用来测试我们的接口,内容为空就行。
二、传递&返回Primitive类型[String/Boolean/Number]
在工程中,新建一个文件lz_primitive.cc,内容如下:
// file : lz_primitive.cc
#include "node.h"
#include "v8.h"
using v8::Isolate;
using v8::FunctionCallbackInfo;
using v8::Value;
using v8::Local;
using v8::String;
using v8::Object;
using v8::Number;
using v8::Boolean;
void method(const FunctionCallbackInfo &args){
//
Isolate * isolate = args.GetIsolate();
if (args[0]->IsNumber()){
double a = args[0]->NumberValue();
Local return_val =Number::New(isolate,a+1);
args.GetReturnValue().Set(return_val);
};
if (args[0]->IsBoolean()){
bool a = args[0]->BooleanValue();
Local return_val =Boolean::New(isolate,!a);
args.GetReturnValue().Set(return_val);
};
if (args[0]->IsString()){
Local add_str = String::NewFromUtf8(isolate,"lizhiqianduan");
add_str = String::Concat(args[0]->ToString(),add_str);
args.GetReturnValue().Set(add_str);
};
}
void init(Local exports) {
NODE_SET_METHOD(exports, "method", method);
}
NODE_MODULE(addon, init)
上面我们定义了一个add方法,接收两个数字,并返回一个数字。
接下来,在我们的编译文件binding.gyp中添加如下内容:
# file binding.gyp
{
"targets":[
{
# 指定C++模块的名字,这里为lz_primitive.node
'target_name': 'l