2015-06-23 6 views
2

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

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()); 
} 

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

void encodeBuffer(float *buffer, size_t l); 

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

+0

Эй @nevos сделал мой ответ поможет вам? –

+0

Да @JohnSmith, спасибо! – nevos

ответ

5

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

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

+0

Будет ли это работать с массивом поплавков? – nevos

+0

Привет @nevos Я не тестировал его, но я так думаю! :) –

 Смежные вопросы

  • Нет связанных вопросов^_^