nodejs中调用c++ addon的函数,c++返回的vector<string>类型如何传到nodejs中使用
发布于 9 年前 作者 VenenoYan 5168 次浏览 最后一次编辑是 8 年前 来自 问答

如题,本人刚刚接触nodejs,要把之前的c++项目功能移植到nodejs项目中,我在nodejs项目中用到了c++ addon,实现一些底层的功能。其中一个c++函数是获取了系统的所有用户名,返回值为vector<string>,请问如何将这个返回值在nodejs中进行接收和使用?如果返回类型为vector<struct MyStruct*>,又该如何传递和使用?谢谢各位大神! ps:考虑过把vector<string>里的所有string 拼接成一个超长的string,在js中再拆分,但是觉得并不解决根本问题,如果传别的如struct之类的数据类型还是不好使,因此主要是想问问如何把c++的这些数据类型和v8的数据类型对应上,并且在js里能够比较容易的应用起来。 代码: binding.cc文件: void GetAllUsersCC(const v8::FunctionCallbackInfov8::Value& args){ v8::Isolate* isolate = args.GetIsolate(); v8::HandleScope scope(isolate); vector<string> users = GetAllUser(); //要传递的返回值,已经验证了返回值的正确性 // args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, user.c_str())); 这是之前返回单一用户名称的时候的方法 } void init(v8::Localv8::Object target) { NODE_SET_METHOD(target, “GetAllUsers”, GetAllUsersCC);
}

在js中调用: binding.GetAllUsers();

2 回复

举个栗子: 数组:v8中为Array

Local<Array> array = Array::New(isolate,2);
array->Set(0,Integer::New(isolate,2));
array->Set(1,Integer::New(isolate,6));

更多详细内容请阅读v8.h相关内容 https://v8docs.nodesource.com/node-5.0/d4/da0/v8_8h.html

楼上正解。

回到顶部