将Node.js的缓冲区传递给C++插件

3

test.js

buf = new Buffer(100);
for (var i = 0; i < 100; i++) buf[i] = i
addon.myFync(buf);

addon.cpp

Handle<Value> set(const Arguments& args) {
    char *buf = SOMETHING(args[0]);
    return Undefined();
}

如何在C++函数中获取缓冲区数据的指针?

我应该在SOMETHING(args[0])的位置写什么?

我已经在编辑器中打开了node_buffer.h,但是我无法理解。

Node版本= v0.10.29

2个回答

8
你可以做以下事情:
char* buf = node::Buffer::Data(args[0]);

直接访问Buffer字节的方法。


太好了!我发现如果你传递一个类型化数组,比如 Uint32Array,它也能正常工作。 - exebook
它能与 Uint32Array 一起使用可能只是巧合,但我对此不太熟悉,所以无法多说。 - loganfsmyth
node::Buffer:Data() 或 node::Buffer:Length() 是以 null 结尾的吗? - sgonzalez
1
@sgonzalez 看起来不太可能,但最好发布一个新问题。 - loganfsmyth
这个解决方案需要更新 Node Addon API。 - Charles Milette

0
根据node.js的节点绑定文档,'arg[0]'值参数可以被访问为:
String::AsciiValue v(args[0]->ToString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接