У меня есть JavaScript, в котором я создал буфер . Я читаю файл и сохраняю данные файла в буфере. Я должен передать данные буфера в программу NAPI / c. Я создал модуль узла. для использования буфера JavaScript в программе c / NAPI мне нужно * uint8_t. Я пытался использовать функцию napi_get_buffer_info для получения Javascript сведений о буфере и данных. Я могу получить длину буфера JavaScript для программы NAPI / c. Пример кода
nodejstest. js
var addon = require('bindings')('test');
const fs = require('fs');
const BUFFER_SIZE = 256;
var buffer = new Buffer.alloc(BUFFER_SIZE);
var ps_uploadPathLocal = 'sampletext.txt';
var fileHandle = fs.openSync(ps_uploadPathLocal, "rs");
var bytesRead = fs.readSync(fileHandle, buffer, 0, 50, 0);
console.log("\nPrinting Buffer value ");
console.log(buffer);
console.log("\nBuffer to String");
console.log(buffer.toString('utf8'));
console.log("Bytes Read from the string ",bytesRead);
console.log(addon.upload(buffer)); // 'world'
test. cc
#include <assert.h>
#include <node_api.h>
#include <stdio.h>
napi_value uploadfunc(napi_env env, napi_callback_info info) {
napi_status status;
napi_value world;
size_t argc = 1;
napi_value args[1];
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
assert(status == napi_ok);
if (argc < 1) {
napi_throw_type_error(env, nullptr, "Wrong number of arguments");
return nullptr;
}
napi_valuetype valuetype0;
status = napi_typeof(env, args[0], &valuetype0);
assert(status == napi_ok);
printf("Value type of the buffer %d \n", valuetype0);
bool buffertype;
status = napi_is_buffer(env, args[0], &buffertype);
assert(status == napi_ok);
printf("If Buffer type %d \n",buffertype);
//napi_is_arraybuffer
bool buffertype1;
status = napi_is_arraybuffer(env, args[0], &buffertype1);
assert(status == napi_ok);
printf("If Buffer type %d \n",buffertype1);
//napi_get_buffer_info
size_t lengthOfBuffer;
dataptr = &data;
void* clsData;
status = napi_get_buffer_info(env, args[0], &clsData,&lengthOfBuffer);
assert(status == napi_ok);
printf("Length of the buffer in C program %zd \n", lengthOfBuffer);
status = napi_create_string_utf8(env, "upload", 5, &world);
assert(status == napi_ok);
return world;
}
#define DECLARE_NAPI_METHOD(name, func) \
{ name, 0, func, 0, 0, 0, napi_default, 0 }
napi_value Init(napi_env env, napi_value exports) {
napi_status status;
napi_property_descriptor uploadv = DECLARE_NAPI_METHOD("upload", uploadfunc);
status = napi_define_properties(env, exports, 1, &uploadv);
assert(status == napi_ok);
return exports;
}
NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
Вопрос:
1) Как я могу получить указатель (* uint8_t) буфера Javascript и перейти к функции c?
2) Как я могу распечатать данные буфера JavaScript в программе c?