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

В настоящее время я пытаюсь выполнить низкоуровневое кодирование с помощью 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 ]

1 голос
/ 20 апреля 2019

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

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

0 голосов
/ 11 апреля 2019

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

Дляпример:

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
}
...