节点版本:v5.1.1操作系统: 窗口7 x86
我可以在 JavaScript 和由 C++ 编写的本机插件之间共享缓冲区对象吗?
尝试在下面,但失败了;
C++插件代码:
void setBuffer(const v8::FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = args.GetIsolate();
char* jsBuffer = node::Buffer::Data(Local<Object>::Cast(args[0]));
memcpy(jsBuffer, "bbbbbbbbbb", 10);
printf("native addon output:%sn", jsBuffer);
}
JavaScript代码:
var native = require('nativeAddon');
var globalBuffer = new Buffer(20).fill('a');
native.setBuffer(globalBuffer); //set globalBuffer to 'bbbbbb....', using memcpy
console.log("js output:" + globalBuffer);
结果:
原生插件输出:bbbbbbbbbbbbaa
JS输出:aaa
但是,全局缓冲区不会改变,为什么?
我认为你的代码没有任何问题。我也在 Linux 5.1.1 中运行了它,看到它工作正常。也就是说,本机插件中的更改会反映在 JS 代码中。不幸的是,我目前无法在 Windows 中进行测试,但很快就会尝试并返回。谢谢!
这是我
的错;node.js没有问题,但原生插件不能在电子渲染过程中修改缓冲区的内容;这是电子的错误;