Javascript 如何使用节点插件api从字符向量创建新的缓冲区?

Javascript 如何使用节点插件api从字符向量创建新的缓冲区?,javascript,c++,node.js,node-gyp,node-addon-api,Javascript,C++,Node.js,Node Gyp,Node Addon Api,我试图使用char的vector创建一个新的Buffer,但是得到的Buffer的内容总是与vector不同。这是我的cpp代码: #包括 Napi::Value GetBuffer(const Napi::CallbackInfo&info){ Napi::Env Env=info.Env(); 向量v{0x10,0x11,0x12}; 返回Napi::Buffer::New(env,v.data(),v.size()); } Napi::对象初始化(Napi::Env Env,Napi::对

我试图使用
char
vector
创建一个新的
Buffer
,但是得到的
Buffer
的内容总是与
vector
不同。这是我的cpp代码:

#包括
Napi::Value GetBuffer(const Napi::CallbackInfo&info){
Napi::Env Env=info.Env();
向量v{0x10,0x11,0x12};
返回Napi::Buffer::New(env,v.data(),v.size());
}
Napi::对象初始化(Napi::Env Env,Napi::对象导出){
exports.Set(Napi::String::New(env,“getBuffer”)、Napi::Function::New(env,getBuffer));
出口退税;
}
节点API模块(插件,初始化);
以下是我的js代码:

const addon=require('./build/Release/addon');
const buffer=addon.getBuffer();
console.log(buffer.toString(“十六进制”);//每次输出都不同,而不是101112

结果缓冲区的内容总是不同的,为什么?如何使其正确?

这是因为在缓冲区的构造函数中,您传递了一个临时对象的地址,该对象在函数返回后立即被释放

如果通过复制向量的内容来创建缓冲区,它将起作用:

Napi::Value GetBuffer(const Napi::CallbackInfo& info) {
  Napi::Env env = info.Env();
  std::vector<char> v{0x10, 0x11, 0x12};
  return Napi::Buffer<char>::Copy(env, v.data(), v.size());
}
Napi::Value GetBuffer(const Napi::CallbackInfo&info){
Napi::Env Env=info.Env();
向量v{0x10,0x11,0x12};
返回Napi::Buffer::Copy(env,v.data(),v.size());
}