Переслать массивный буфер из C в JS с помощью node-api

В настоящее время я пытаюсь сделать кодирование низкого уровня с JS. По этой причине я использую https://nodejs.org/api/n-api.html чтобы добавить пользовательский код C в мою среду исполнения node.js.

Я получаю передаваемые значения и изменяю их в c для работы, даже читая массивные буферы и интерпретируя их так, как я хочу в C, но я могу только возвращать ограниченные значения JS (числа и строки, как видно в этой части https: // nodejs.org / api / n-api.html # n_api_functions_to_convert_from_c_types_to_n_api)

Кто-нибудь знает, как получить массив буферов N-API? Я хотел бы дать моему JS определенный буфер, который я определил в C, и затем работать через Dataviews.

2 ответа

Решение

Я нашел ответ: https://nodejs.org/api/n-api.html

Я искал ключевые слова, отличные от "external", но это именно то, что я искал: вы заранее определяете буфер в C, а затем создаете буфер массива NAPI/JS, который использует этот базовый буфер. napi_create_arraybuffer очистит буфер, который затем может быть обработан в C, но вы не можете, например, загрузить файл и затем использовать этот буфер. Итак, napi_create_external_arraybuffer - это путь.

Я не знаю, помогает ли это (я также относительно новичок в N-API.), Но вы можете создать буфер массива из void* и фиксированной длины: https://nodejs.org/api/n-api.html

Например:

napi_value CreateArrayBuffer(napi_env env, napi_callback_info info) {
  // the value to return
  napi_value arrayBuffer;

  // allocates 100 bytes for the ArrayBuffer
  void* yourPointer = malloc(100 /* bytes */);

  // creates your ArrayBuffer
  napi_create_arraybuffer(env, 100 /* bytes */, &yourPointer, &arrayBuffer);

  return arrayBuffer; // ArrayBuffer with 100 bytes length
}
Другие вопросы по тегам