gpt4 book ai didi

c++ - 使用 N-API 时如何避免段错误?

转载 作者:行者123 更新时间:2023-11-30 04:42:46 33 4
gpt4 key购买 nike

我正在尝试构建一个 node-js wrapper对于 C++ 库 Clip使用 Node 插件 api (N-NAPI)。我想从用户的剪贴板中检索图像并将其传递给 node.js 缓冲区中的 JavaScript。

这是我尝试过的:(只有相关部分,其余部分是 here )

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++ 和构建 Node 插件的新手。

最佳答案

我认为 Napi::Buffer::Copy 不是一个好的解决方案,因为复制底层数据的成本很高。

Napi::Buffer::New 只要您保持内存事件直到 JavaScript 代码使用 Buffer 对象完成,就应该可以工作。在您的情况下,一旦函数返回,由 pixels 指向的数据将被取消分配。

您也可以使用外部缓冲区 API 自行管理内存: https://nodejs.org/api/n-api.html#napi_create_external_arraybuffer

关于c++ - 使用 N-API 时如何避免段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58600298/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com