我正在尝试使用node-addon-api从char的vector创建一个新的Buffer,但生成的Buffer内容总是与vector不同。
#include <napi.h>
Napi::Value GetBuffer(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
std::vector<char> v{0x10, 0x11, 0x12};
return Napi::Buffer<char>::New(env, v.data(), v.size());
}
Napi::Object Init(Napi::Env env, Napi::Object exports) {
exports.Set(Napi::String::New(env, "getBuffer"), Napi::Function::New(env, GetBuffer));
return exports;
}
NODE_API_MODULE(addon, Init);下面是我的js代码:
const addon = require('./build/Release/addon');
const buffer = addon.getBuffer();
console.log(buffer.toString("hex")); // The output is different every time, instead of being 101112结果缓冲区的内容总是不同的,为什么?如何让它变得正确?
发布于 2021-03-14 01:52:00
这是因为在Buffer的构造函数中,您传递了一个临时对象的地址,该对象在函数返回时立即被释放。
如果您通过复制向量的内容来创建缓冲区,它将会起作用:
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());
}https://stackoverflow.com/questions/65060327
复制相似问题