So, I solved my problem using the workaround below.
Handle<Object> createBuffer(void *data, size_t size) {
if (size == 0)
throw "Zero sized data";
Handle<Value> abv = Context::GetCurrent()->Global()->Get(String::NewSymbol("ArrayBuffer"));
Handle<Value> argv[] = { Integer::NewFromUnsigned(size) };
Handle<Object> arrbuf = Handle<Function>::Cast(abv)->NewInstance(1, argv);
void *buffer = arrbuf->GetPointerFromInternalField(0);
memcpy(buffer, data, size);
Handle<Value> ui8av = Context::GetCurrent()->Global()->Get(String::NewSymbol("Uint8Array"));
argv[0] = arrbuf;
Handle<Object> result = Handle<Function>::Cast(ui8av)->NewInstance(1, argv);
return result;
}
, v8.
, node , , node -webkit, ArrayBuffer, TypedArray, Uint8Array .. node/src/v8_typed_array.cc. , v8.h, .
javascript- - :
var buffer = ... // call function that in the end call createBuffer
var data = new Uint8Array(buffer);
createBuffer arrbuf ArrayBuffer, : 0. , Uint8Array ++, , .