Передача массива из node.js в c++ v8 с использованием NAN

Я использую NAN для включения библиотеки C++ в node.js. Я понимаю, как передавать числа и строки туда и обратно между ними, но я не понимаю, как передавать массивы. Я хотел бы сделать что-то вроде этого:

index.js

var test = require('bindings')('test');

var buffer = [0,0,0,0,0,0.1,0,0,0,0,-0.1];
test.encode(buffer, buffer.length);

test.cc

var encoder = new Encoder();

NAN_METHOD(Encode){

    //the next line is incorrect, I want to take the buffer array and pass it as a pointer to the encodeBuffer() function
    Local<Number> buffer = args[0].As<Number>();

    //get the integer value of the second argument
    Local<Number> buffer_length = args[1].As<Number>();
    int bl_int = buffer_length->IntegerValue();

    //call function
    encoder.encodeBuffer(buffer, bl_int);
}

void Init(Handle<Object> exports) {
  exports->Set(NanNew("encode"), NanNew<FunctionTemplate>(Encode)->GetFunction());
}

Фактический метод, который я хотел бы использовать из библиотеки С++, объявлен:

void encodeBuffer(float *buffer, size_t l);

Я пытался посмотреть документацию, но там ничего не говорится об указателях и массивах. Я что-то упустил?


person nevos    schedule 23.06.2015    source источник
comment
Эй, @невос, тебе помог мой ответ?   -  person John Smith    schedule 26.06.2015
comment
Да, @JohnSmith, спасибо!   -  person nevos    schedule 30.06.2015


Ответы (1)


Допустим, у вас есть буфер, как я обычно передаю:

var buffer = new Buffer([10, 20, 30, 40, 50]);

Затем передать его расширению:

Extension.to_image(buffer, buffer.length

И в моем родном коде:

 NAN_METHOD(to_image) {
   unsigned char*buf = (unsigned char*) node::Buffer::Data(args[0]->ToObject());
   unsigned int size = args[1]->Uint32Value();

Как вы можете видеть в конце, у меня есть буфер и длина буфера, переданные в мой код C++.

Вот хорошая статья: http://luismreis.github.io/node-bindings-guide/docs/arguments.html

И еще один очень хороший: http://www.puritys.me/docs-blog/article-286-How-to-pass-the-paramater-of-Node.js-or-io.js.-into-native-C/C++-function..html

person John Smith    schedule 23.06.2015
comment
Привет @nevos Я не проверял, но думаю да! :) - person John Smith; 07.07.2015
comment
можно ли пройти, чтобы получить длину непосредственно из args[0]? - person Stepan Yakovenko; 14.02.2020