如何从节点本机插件正确创建Buffer对象?

时间:2017-01-20 14:34:53

标签: c++ node.js node.js-addon

我正在使用节点6.9.1,我尝试创建一个将创建节点缓冲区对象的cpp插件。经过一些研究,我想出了以下代码:

#include <node.h>
#include <node_buffer.h>
#include <v8.h>

using v8::Local;
using v8::Object;
using v8::HandleScope;
using v8::Isolate;

Local<Object> create_buffer(Isolate* isolate, char* rawData, int length) {
  HandleScope scope(isolate);
  Local<Object> buf = node::Buffer::New(
    isolate,
    rawData,
    length).ToLocalChecked();
  return buf;
}

我使用如下:

Local<Value> buff = create_buffer(isolate, rawData, length);
const unsigned argc = 1;
Local<Value> argv[argc] = { buff };
cb->Call(Null(isolate), argc, argv);

这段代码编译得很好但是当我访问我通过回调获得的缓冲区的.length属性时会导致错误:

Security context: 0x9d84c7cfb51 <JS Object>#0#

我找到了几个教程但是他们都使用了早期版本的v8 / node api,我找不到任何信息在最近的Node版本中创建缓冲区的正确方法。也有可能我在某个地方犯了错误。如果您能指导我正确的方向,请提前感谢。

1 个答案:

答案 0 :(得分:1)

最好的方法是使用NAN的NewBuffer帮助器:

   i.start i.end V1
1:       3     5  2
2:      14    16  2
3:      29    31  NA
4:      20    22  NA

节点node_buffer.h也有一个公共构造函数,但它不一定在不同版本中保持一致。

我不是肯定的,但你的错误可能是因为你已经释放了用于构建缓冲区的原始数据?