2015-06-23 22 views
2

我正在使用NAN在node.js中包含一个C++库。我知道如何在两者之间来回传递数字和字符串,但我不明白如何传递数组。我想这样做是这样的:使用NAN将数组从node.js传递到C++ v8

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

我试着看文档,但他们没有说任何关于指针和数组..我是mi什么东西?

+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我​​没有测试它,但我认为是这样! :) –