在 JavaScript 和由 C++ 编写的本机插件之间共享缓冲区对象



节点版本: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没有问题,但原生插件不能在电子渲染过程中修改缓冲区的内容;这是电子的错误;

最新更新