2016-04-28 52 views
0

節點版本:v5.1.1 os:window7 x86在javascript和原生插件之間共享緩衝區對象,用C++編寫?

我可以在javascript和本地插件之間共享緩衝區對象嗎?

嘗試以下,但失敗;

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:%s\n", 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); 

結果:

本地插件輸出:bbbbbbbbbbaaaaaaaaaaaaaaaa

JS輸出:aaaaaaaaaaaaaaaaaaaaaaaaaa

但globalBuffer沒有改變,爲什麼?

+0

你可能用'node :: Buffer :: Data'創建一個新的緩衝區嗎? – tadman

+0

只是轉換爲char *; – csy2002

回答

0

我沒有看到您的代碼有任何問題。 我也在Linux 5.1.1中運行它,並看到它工作正常。也就是說,本地插件的變化反映在JS代碼中。 不幸的是,我目前無法在Windows中測試,但很快就會嘗試並返回。謝謝!

0

這是我的錯; node.js中沒有問題,但本機插件無法修改電子渲染過程中Buffer的內容; 這是電子的缺陷;