Как избежать ошибки сегментации при использовании N-API? - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь создать обертку node-js для библиотеки C ++ Clip , используя addon api узла (N-NAPI). Я хочу получить изображение из буфера обмена пользователя и передать его в JavaScript в буфере node.js.

Это то, что я пробовал: (только соответствующие части, остальное здесь )

Napi::Object get_image(const Napi::CallbackInfo& args) {
  Napi::Env env = args.Env();

  clip::image img;
  clip::get_image(img);

  clip::image_spec spec = img.spec();

  char *pixels = img.data();
  // since I dont know the length of pixels I use the width * height of the image
  Napi::Buffer<char> img_buffer = Napi::Buffer<char>::New(env, pixels, spec.width * spec.height);
  return img_buffer;
}

Это компилируется просто отлично, но когда я пытаюсь использовать его в JavaScript, это приводит к Segmentation fault (core dumped).

Пример кода JS:

const clip = require('bindings')('node_clip_wrapper')
console.log(clip.getImage())

Как я мог решить это? Пожалуйста, извините, если мне не хватает чего-то простого, я очень плохо знаком с C ++ и сборкой аддонов узлов.

1 Ответ

0 голосов
/ 14 ноября 2019

Решение было использовать Napi::Buffer::Copy вместо New. Документация

Просто так:

Napi::Buffer<char> img_buffer = Napi::Buffer<char>::Copy(env, pixels, spec.width * spec.height);
...