最新的node.js Addon和以前不同,外接函数使用void FunctionName(const FunctionCallbackInfo<Value>& args)。
形参和返回都使用args来获得:
1、FunctionCallbackInfo重载了'[]',可以通过'[]'取出。取出时应先对args的长度(Length())进行判断。
获取isolate,全局管理指针。
// 使用 HandleScope 来管理生命周期
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
Local<XXX> local = args[0]->ToXXX(isolate);
最新的转换函数都添加了isolate参数,方便管理。
args所转换的数据只能是Local(局部)变量,如果需要长期保存,应转换为Persistent(全局)变量。
bool BooleanValue()
int32_t Int32Value()
int64_t IntegerValue()
double NumberValue()
Local<Boolean> ToBoolean()
Local<String> ToString()
Local<Int32> ToInt32()
Local<Integer> ToInteger()
Local<Number> ToNumber()
Local<Object> ToObject()
Local<Uint32> ToUint32()
两个特殊参数转换:
输入参数为函数:需要通过Local<Function>::Cast进行转换,而没有To函数。并且获取到的参数为Local变量,函数结束后系统会收回变量,所以如果需要保持函数指针,在其他地方使用,必须转换为Persistent变量。
输入参数为类,JSON,数组:这几个就是Object,可以通过ToObject()获取。
2、args.GetReturnValue().Set()返回值函数,没有调用这个函数返回undefined,空参数调用为没有返回值。
加载初始化函数void Initialize(Handle<Object> exports)。
模块注册宏NODE_MODULE(AddonCore, Initialize)
函数注册宏NODE_SET_METHOD(exports, "FunctionName", FunctionName);
在初始化函数中注册函数,使C函数能在JavaScript上直接使用。